要讓滑鼠光標根據不同的繪圖模式改變形狀,可以使用 PyQt 的 QCursor
類來設置不同的滑鼠光標圖標。
假設是要畫ROI在畫布上,這樣當切換到矩形、圓形、筆等不同模式時,滑鼠光標會變為對應的圖標。
以下是如何實現這種效果的步驟:
set_rect_mode
、set_circle_mode
等模式設置方法中調用設置光標的方法。import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
from PyQt5.QtCore import Qt
class CursorSwitcher(QWidget):
def __init__(self):
super().__init__()
self.initUI()
# 預設的滑鼠光標樣式
self.cursor_styles = [
Qt.ArrowCursor, # 預設箭頭
Qt.WaitCursor, # 沙漏/等待
Qt.PointingHandCursor, # 手形
Qt.CrossCursor, # 十字
Qt.IBeamCursor # 文本選擇
]
self.current_cursor_index = 0 # 當前的光標索引
def initUI(self):
# 創建按鈕
self.button = QPushButton("切換滑鼠光標樣式", self)
self.button.clicked.connect(self.switch_cursor)
# 設置佈局
layout = QVBoxLayout()
layout.addWidget(self.button)
self.setLayout(layout)
# 設置窗口屬性
self.setWindowTitle("滑鼠光標切換器")
self.resize(300, 100)
def switch_cursor(self):
# 切換到下一個光標樣式
self.current_cursor_index = (self.current_cursor_index + 1) % len(self.cursor_styles)
self.setCursor(self.cursor_styles[self.current_cursor_index])
if __name__ == "__main__":
app = QApplication(sys.argv)
window = CursorSwitcher()
window.show()
sys.exit(app.exec_())
執行此程式後,點擊「切換滑鼠光標樣式」按鈕就可以在不同的滑鼠光標樣式之間切換。
PyQt5 提供了多種內建的標準光標,可以通過 Qt
模組中的常量來設置這些光標。
以下是常見的 QCursor
光標類型:
from PyQt5.QtCore import Qt
# 常見的 QCursor 光標類型:
cursor_types = {
"ArrowCursor": Qt.ArrowCursor, # 預設箭頭光標
"UpArrowCursor": Qt.UpArrowCursor, # 向上箭頭
"CrossCursor": Qt.CrossCursor, # 十字光標
"WaitCursor": Qt.WaitCursor, # 等待光標(通常為沙漏或旋轉光標)
"IBeamCursor": Qt.IBeamCursor, # I 字形光標(常見於文字輸入)
"SizeVerCursor": Qt.SizeVerCursor, # 垂直調整大小
"SizeHorCursor": Qt.SizeHorCursor, # 水平調整大小
"SizeBDiagCursor": Qt.SizeBDiagCursor, # 右下/左上調整大小(對角)
"SizeFDiagCursor": Qt.SizeFDiagCursor, # 右上/左下調整大小(對角)
"SizeAllCursor": Qt.SizeAllCursor, # 全方位調整大小
"BlankCursor": Qt.BlankCursor, # 隱藏光標
"SplitVCursor": Qt.SplitVCursor, # 垂直分割光標
"SplitHCursor": Qt.SplitHCursor, # 水平分割光標
"PointingHandCursor": Qt.PointingHandCursor, # 手形光標(常見於超連結)
"ForbiddenCursor": Qt.ForbiddenCursor, # 禁止標誌光標(如禁止操作)
"OpenHandCursor": Qt.OpenHandCursor, # 開放的手形光標
"ClosedHandCursor": Qt.ClosedHandCursor, # 關閉的手形光標
"WhatsThisCursor": Qt.WhatsThisCursor, # 問號光標
"BusyCursor": Qt.BusyCursor # 忙碌光標(等待)
}
# 列出所有光標
for name, cursor_type in cursor_types.items():
print(f"{name}: {cursor_type}")