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

更新於 發佈於 閱讀時間約 8 分鐘

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

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

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

  1. 定義光標變化的方法:根據不同的模式設置相應的光標,例如十字光標、筆形光標等。
  2. 在模式切換方法中調用光標變化方法:在 set_rect_modeset_circle_mode 等模式設置方法中調用設置光標的方法。

示意圖

raw-image
raw-image

程式範例

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



留言
avatar-img
留言分享你的想法!
avatar-img
螃蟹_crab的沙龍
148會員
255內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
螃蟹_crab的沙龍的其他內容
2025/02/10
在 PyQt 中,信號與槽(Signal & Slot)機制是用來實現物件間通信的核心機制。 當信號被發射時,槽函數(Slot)根據預先連接的規則被調用。這一過程有時候會呈現出「排隊」的現象,即信號並非立即執行,而是先放入事件隊列,等待事件循環(Event Loop)逐一處理。 本文將介紹其原理
Thumbnail
2025/02/10
在 PyQt 中,信號與槽(Signal & Slot)機制是用來實現物件間通信的核心機制。 當信號被發射時,槽函數(Slot)根據預先連接的規則被調用。這一過程有時候會呈現出「排隊」的現象,即信號並非立即執行,而是先放入事件隊列,等待事件循環(Event Loop)逐一處理。 本文將介紹其原理
Thumbnail
2025/01/19
PyQt 中的 pyqtSignal 和 pyqtSlot 教學 在使用 PyQt5 開發 GUI 程式時,信號 (Signal) 和 槽 (Slot) 是重要的機制,用於元件之間的通訊。 PyQt 提供了 pyqtSignal 和 pyqtSlot 來自定義信號和槽,進一步實現更靈活的功能。
Thumbnail
2025/01/19
PyQt 中的 pyqtSignal 和 pyqtSlot 教學 在使用 PyQt5 開發 GUI 程式時,信號 (Signal) 和 槽 (Slot) 是重要的機制,用於元件之間的通訊。 PyQt 提供了 pyqtSignal 和 pyqtSlot 來自定義信號和槽,進一步實現更靈活的功能。
Thumbnail
2024/11/16
本篇文章將帶你一步步建立一個簡單的 PyQt5 GUI 應用程式,通過 yt-dlp 來下載 YT 視頻。你可以在這個應用中輸入視頻的 URL,並即時看到下載進度。 GUI介面 下載到開啟的資料夾路徑 前置條件 在開始之前,請確保你已經安裝了以下軟體和庫: 安裝 Python 確保你
Thumbnail
2024/11/16
本篇文章將帶你一步步建立一個簡單的 PyQt5 GUI 應用程式,通過 yt-dlp 來下載 YT 視頻。你可以在這個應用中輸入視頻的 URL,並即時看到下載進度。 GUI介面 下載到開啟的資料夾路徑 前置條件 在開始之前,請確保你已經安裝了以下軟體和庫: 安裝 Python 確保你
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
要讓滑鼠光標根據不同的繪圖模式改變形狀,可以使用 PyQt 的 QCursor 類來設置不同的滑鼠光標圖標。 假設是要畫ROI在畫布上,這樣當切換到矩形、圓形、筆等不同模式時,滑鼠光標會變為對應的圖標。 以下是如何實現這種效果的步驟: 定義光標變化的方法:根據不同的模式設置相應的光標,例如十字
Thumbnail
要讓滑鼠光標根據不同的繪圖模式改變形狀,可以使用 PyQt 的 QCursor 類來設置不同的滑鼠光標圖標。 假設是要畫ROI在畫布上,這樣當切換到矩形、圓形、筆等不同模式時,滑鼠光標會變為對應的圖標。 以下是如何實現這種效果的步驟: 定義光標變化的方法:根據不同的模式設置相應的光標,例如十字
Thumbnail
首先我們先用小畫家,創建一個簡單的十字箭頭圖,在用高斯模糊將圖用模糊來模擬圖片糊掉的狀況。 如何檢測呢? 先假設在圖像清晰的狀況下,取邊緣的話線條應該是很明顯的吧,模糊的情況下,邊緣線條應該就會變多? 看下圖,由左看到右,在圖片清晰的狀況下,線條是相當明顯的 那有什麼方法將其量化成數字?
Thumbnail
首先我們先用小畫家,創建一個簡單的十字箭頭圖,在用高斯模糊將圖用模糊來模擬圖片糊掉的狀況。 如何檢測呢? 先假設在圖像清晰的狀況下,取邊緣的話線條應該是很明顯的吧,模糊的情況下,邊緣線條應該就會變多? 看下圖,由左看到右,在圖片清晰的狀況下,線條是相當明顯的 那有什麼方法將其量化成數字?
Thumbnail
在E70的影片中,Meiko跟大家分享Excel版本的十字光標設定,收到很多同學的回饋,最近有同學提到,也想在Google Sheets上執行光標標註的功能,Meiko原以為蠻簡單的,後來實操之後發現並不容易,於是請教了AI,意外的設計出一個光標控制面板,我覺得很方便,分享給大家~
Thumbnail
在E70的影片中,Meiko跟大家分享Excel版本的十字光標設定,收到很多同學的回饋,最近有同學提到,也想在Google Sheets上執行光標標註的功能,Meiko原以為蠻簡單的,後來實操之後發現並不容易,於是請教了AI,意外的設計出一個光標控制面板,我覺得很方便,分享給大家~
Thumbnail
Step1. 開啟範例練習檔,圖層資料夾Set1為使用矩型工具與線段工具繪製之紙張紋路,為練習方便在路徑控制版中已包含本範例所需的物件形狀路徑,均由繪圖工具組繪製,也可自行繪製。 設定前景色為#FEBD63,新增圖層1,使用矩型繪圖工具、繪圖方式選擇填滿像素,繪製5*5像素之小正方形於左下角,並
Thumbnail
Step1. 開啟範例練習檔,圖層資料夾Set1為使用矩型工具與線段工具繪製之紙張紋路,為練習方便在路徑控制版中已包含本範例所需的物件形狀路徑,均由繪圖工具組繪製,也可自行繪製。 設定前景色為#FEBD63,新增圖層1,使用矩型繪圖工具、繪圖方式選擇填滿像素,繪製5*5像素之小正方形於左下角,並
Thumbnail
Step1. 開啟500X500像素、解析度72、背景白色之RGB新檔,使用鋼筆工具,上方工具設定列上選擇繪製路徑。首先在版面右下角邊點一下建立起始節點,接著在如圖位置上按住左鍵建立第二個節點並拖拉出路徑彎曲控制線,調整路經彎曲如圖後放開滑鼠左鍵。 Step2. 按住Alt滑鼠點取第二個節點,使
Thumbnail
Step1. 開啟500X500像素、解析度72、背景白色之RGB新檔,使用鋼筆工具,上方工具設定列上選擇繪製路徑。首先在版面右下角邊點一下建立起始節點,接著在如圖位置上按住左鍵建立第二個節點並拖拉出路徑彎曲控制線,調整路經彎曲如圖後放開滑鼠左鍵。 Step2. 按住Alt滑鼠點取第二個節點,使
Thumbnail
STEP1. 開啟範例練習檔,按住Ctrl滑鼠點取文字圖層建立文字選取區,按下色版控制版下方『儲存選取範圍成為色版』按鈕,將選取區儲存為Alpha 1,Ctrl+D取消選取。 Step2. 回到圖層控制版,在文字圖層上執行 [ 濾鏡 > 模糊 > 高斯模糊 ] 強度:5 像素,按住Ctrl滑鼠點
Thumbnail
STEP1. 開啟範例練習檔,按住Ctrl滑鼠點取文字圖層建立文字選取區,按下色版控制版下方『儲存選取範圍成為色版』按鈕,將選取區儲存為Alpha 1,Ctrl+D取消選取。 Step2. 回到圖層控制版,在文字圖層上執行 [ 濾鏡 > 模糊 > 高斯模糊 ] 強度:5 像素,按住Ctrl滑鼠點
Thumbnail
Step1. 開啟500X500像素、解析度72之RGB新檔,背景並填入黑色。設定前景色為白色、背景為黑色,執行[ 濾鏡 > 演算上色 > 雲彩效果 ] 產生黑白雲狀,並重複執行二次。 Step2. 執行[ 濾鏡 > 濾鏡收藏館>素描 > 畫筆效果 ] 設定筆觸長度:15、亮度/暗度平衡:50、
Thumbnail
Step1. 開啟500X500像素、解析度72之RGB新檔,背景並填入黑色。設定前景色為白色、背景為黑色,執行[ 濾鏡 > 演算上色 > 雲彩效果 ] 產生黑白雲狀,並重複執行二次。 Step2. 執行[ 濾鏡 > 濾鏡收藏館>素描 > 畫筆效果 ] 設定筆觸長度:15、亮度/暗度平衡:50、
Thumbnail
由於二字母皆須加上陰影,因此在重疊、交叉處的陰影與交叉筆畫需精準清除方可達到重疊且筆畫要交叉與陰影的效果。 STEP1. 開啟練習檔,首先為g圖層加上陰影,設定「不透明」:50%、「角度」:120、「間距」:5像素、「尺寸」:10像素。也為Q圖層加上相同的陰影效果。 STEP2. 為了要處理交錯
Thumbnail
由於二字母皆須加上陰影,因此在重疊、交叉處的陰影與交叉筆畫需精準清除方可達到重疊且筆畫要交叉與陰影的效果。 STEP1. 開啟練習檔,首先為g圖層加上陰影,設定「不透明」:50%、「角度」:120、「間距」:5像素、「尺寸」:10像素。也為Q圖層加上相同的陰影效果。 STEP2. 為了要處理交錯
Thumbnail
利用形狀繪圖工具,並搭配變形處理,完成具立體感的影像繪圖。 STEP1. 開啟新檔選擇網頁,寬高均為500像素、解析度72像素/英吋,並取消工作畫板選項。 執行【檢視>尺標】在尺標刻度上按下滑鼠右鍵,選擇執行【像素】,即是將介面設定值單位固定為像素單位。 STEP2. 在圖層上新增圖層1,使用
Thumbnail
利用形狀繪圖工具,並搭配變形處理,完成具立體感的影像繪圖。 STEP1. 開啟新檔選擇網頁,寬高均為500像素、解析度72像素/英吋,並取消工作畫板選項。 執行【檢視>尺標】在尺標刻度上按下滑鼠右鍵,選擇執行【像素】,即是將介面設定值單位固定為像素單位。 STEP2. 在圖層上新增圖層1,使用
Thumbnail
1.繪製線段 若要一次繪製一條直線線段,請使用「線段」工具,接著請設定呈現線段顏色的筆畫顏色,在場景上直接按下滑鼠左鍵拖曳後放開,即可完成線段繪製。 ★操作技巧: (1)在拖曳繪製線段的同時(未放開滑鼠前),若按住【Shift】鍵,即可繪製出水平、垂直或45 度角的直線線段。 (2)使用選取工具選
Thumbnail
1.繪製線段 若要一次繪製一條直線線段,請使用「線段」工具,接著請設定呈現線段顏色的筆畫顏色,在場景上直接按下滑鼠左鍵拖曳後放開,即可完成線段繪製。 ★操作技巧: (1)在拖曳繪製線段的同時(未放開滑鼠前),若按住【Shift】鍵,即可繪製出水平、垂直或45 度角的直線線段。 (2)使用選取工具選
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News