2024-10-30|閱讀時間 ‧ 約 0 分鐘

[PyQt5][Python]更改滑鼠光標

要讓滑鼠光標根據不同的繪圖模式改變形狀,可以使用 PyQt 的 QCursor 類來設置不同的滑鼠光標圖標。

假設是要畫ROI在畫布上,這樣當切換到矩形、圓形、筆等不同模式時,滑鼠光標會變為對應的圖標。

以下是如何實現這種效果的步驟:

  1. 定義光標變化的方法:根據不同的模式設置相應的光標,例如十字光標、筆形光標等。
  2. 在模式切換方法中調用光標變化方法:在 set_rect_modeset_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_())

程式碼說明

  • cursor_styles:定義了一組滑鼠光標樣式。
  • switch_cursor():每次按下按鈕時,切換到下一個光標樣式,並將其應用到視窗上。
  • current_cursor_index:用來跟踪當前的光標樣式,以便循環切換。

執行此程式後,點擊「切換滑鼠光標樣式」按鈕就可以在不同的滑鼠光標樣式之間切換。


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}")



分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.