K.M*_*ier 5 python qt pyqt qt5 pyqt5
我正在使用PyQt5 for GUI 在Python 3.7中创建一个应用程序。我想在应用程序中自定义鼠标光标。
让我们从Qt5中设置的标准光标开始,如下表所示:https :
//doc.qt.io/qt-5/qt.html#CursorShape-enum。您会注意到Qt5有一个专用的Enum,它Qt::CursorShape描述了相应游标的作用。例如:
我想用自定义光标替换每个标准Qt光标:
一开始我尝试过这样的事情:
pixmap = QPixmap("C:/../my_arrow.png")
cursor = QCursor(pixmap, 32, 32)
QApplication.setOverrideCursor(cursor)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这种方法对我的目的不利。从文档中:
应用程序覆盖游标旨在向用户显示应用程序处于特殊状态,例如在可能需要一段时间的操作期间。
覆盖光标将显示在应用程序的所有小部件中,直到调用restoreOverrideCursor()或另一个setOverrideCursor()。
换句话说,使用该setOverrideCursor()方法有两个缺点:
我将不得不手动跟踪鼠标指针应更改为哪个角色,setOverrideCursor()每次都调用并向其提供适当的QCursor()。
我需要跟踪Qt自动调用的位置restoreOverrideCursor(),因为这实际上会撤消我自己的更改。与Qt的斗争将是永恒的。
我的第二种方法是使用该setCursor()函数:
pixmap = QPixmap("C:/../Arrow.png")
cursor = QCursor(pixmap, 32, 32)
my_widget.setCursor(cursor)
Run Code Online (Sandbox Code Playgroud)
我在顶级窗口小部件-上执行此操作,QMainWindow()以便将效果应用于整个应用程序。
它的效果很好,但有一个缺点。此功能仅更改“默认光标”(指向箭头),仅此而已。所有特殊光标仍然相同。
实际上,我想做这样的事情:
# Note: 'mainwin' is the QMainWindow().
mainwin.setCursor( QCursor(QPixmap("C:/../Arrow.png"), 32, 32), Qt.ArrowCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../UpArrow.png"), 32, 32), Qt.UpArrowCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../Cross.png"), 32, 32), Qt.CrossCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../Wait.png"), 32, 32), Qt.WaitCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../IBeam.png"), 32, 32), Qt.IBeamCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../SizeVer.png"), 32, 32), Qt.SizeVerCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../SizeHor.png"), 32, 32), Qt.SizeHorCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../SizeBDiag.png"), 32, 32), Qt.SizeBDiagCursor )
mainwin.setCursor( QCursor(QPixmap("C:/../SizeFDiag.png"), 32, 32), Qt.SizeFDiagCursor )
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不是setCursor()函数的工作方式。
您有最适合我目的的解决方案吗?
我从以下来源学到了很多东西:
不幸的是,他们都没有提供解决我问题的方法。我在这里只提到它们,因为它们与我正在尝试做的事情有关-但与(!)不同。
小智 2
# I'm coming```.
# 1. Set the cursor map
self.cursor_pix = QPixmap('exa.png')
# 2. Scale textures
self.cursor_scaled_pix = self.cursor_pix.scaled(QSize(20, 20), Qt.KeepAspectRatio)
# 3. Set cursor style and cursor focus position
self.current_cursor = QCursor(self.cursor_scaled_pix, -1, -1)
# 4. Set the cursor for the specified window
widget.setCursor(self.current_cursor)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
468 次 |
| 最近记录: |