1
A
回答
2
你只需重写照顾它的方法。
在这种情况下,您将覆盖mousePressEvent,看看这个,看看它是否有意义,并为你需要的工作。
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
def mousePressEvent(self, QMouseEvent):
if QMouseEvent.button() == Qt.LeftButton:
print("Left Button Clicked")
elif QMouseEvent.button() == Qt.RightButton:
#do what you want here
print("Right Button Clicked")
if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MyWidget()
mw.show()
sys.exit(app.exec_())
另一个好方法是在对象中安装一个事件过滤器并覆盖它的eventFilter。在那个方法里面,你会做出你想要的。请记住,您始终可以使用pyqtSignal获得良好的实践,并调用另一个对象来完成这项工作,而不是用很多逻辑来重载该方法。
这里是另外一个小例子:
import sys
from PyQt5.QtCore import QEvent
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
self.installEventFilter(self)
def eventFilter(self, QObject, event):
if event.type() == QEvent.MouseButtonPress:
if event.button() == Qt.RightButton:
print("Right button clicked")
return False
if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MyWidget()
mw.show()
sys.exit(app.exec_())
注:请记住,这最后一个例子将接收事件的所有种类,所以你必须要小心,并确保它是一个你想要的,而不是运行时中断您的应用程序调用不存在的事件的方法,因为它不是那种类型。例如,如果您在未确认之前致电event.button()
,那么它将是QEvent.MouseButtonPress
。您的应用程序当然会中断。
还有其他方法可以做到这一点,这些是最知名的。
0
我想出了一个很简单的方法来完成这个工作,并且完美地工作。在ControlMainWindow类中添加以下初始化上下文菜单政策CustomeContextMenu其中listWidget_extractedmeters将是你QListWidget名称:
self.listWidget_extractedmeters.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.listWidget_extractedmeters.connect(self.listWidget_extractedmeters,QtCore.SIGNAL("customContextMenuRequested(QPoint)"), self.listItemRightClicked)
然后在ControlMainwindow类以下功能允许您添加上下文菜单项,并呼吁一个函数执行一些功能:
def listItemRightClicked(self, QPos):
self.listMenu= QtGui.QMenu()
menu_item = self.listMenu.addAction("Remove Item")
self.connect(menu_item, QtCore.SIGNAL("triggered()"), self.menuItemClicked)
parentPosition = self.listWidget_extractedmeters.mapToGlobal(QtCore.QPoint(0, 0))
self.listMenu.move(parentPosition + QPos)
self.listMenu.show()
def menuItemClicked(self):
currentItemName=str(self.listWidget_extractedmeters.currentItem().text())
print(currentItemName)
相关问题
- 1. PyQt - 调整父级窗口小部件的子窗口大小
- 2. 用PyQt闪烁窗口小部件
- 3. PyQt的:窗口小部件和按钮
- 4. 管PyQt窗口小部件图片到ffmpeg
- 5. VueJS中的右键单击和右键单击事件
- 6. 右键单击
- 7. 如何使用QT/PyQt中的可点击文本创建窗口小部件?
- 8. 将事件绑定到右键单击
- 9. Visual C#窗体右键单击按钮
- 10. 如何弹出右键单击窗体?
- 11. 编辑窗口右键菜单在C#
- 12. 想要在弹出窗口之外听右键单击。
- 13. 如何防止弹出窗口右键单击使用JavaScript?
- 14. 将子窗口小部件的关键事件重定向到其父窗口小部件
- 15. PyQt的 - 添加拖放窗口小部件
- 16. PyQT - 修改其他功能的主窗口小部件
- 17. 放入CDetailView窗口小部件另一个窗口小部件
- 18. 单击按钮后,显示Google翻译窗口小部件
- 19. Tkinter菜单窗口小部件
- 20. WordPress的菜单窗口小部件CSS
- 21. 从窗口访问窗口小部件*
- 22. 右键单击Swing
- 23. 右键单击MenuIcon
- 24. 右键单击JButton
- 25. Mapbox右键单击
- 26. PyQt的,小部件
- 27. 记事本++右键单击以在新窗口中打开文件
- 28. 追加到窗口小部件样式
- 29. NSEvent单击右键菜单
- 30. MVC窗口小部件
如何在PyQT5中做到这一点? – Imran