您只需要覆盖处理它的方法。
在这种情况下,您将覆盖 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_())
Run Code Online (Sandbox Code Playgroud)
另一个好方法是在你的对象中安装一个事件过滤器并覆盖它的 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_())
Run Code Online (Sandbox Code Playgroud)
注意:请记住,最后一个示例将接收所有类型的事件,因此您必须小心并确保它是您想要的,而不是运行时破坏您的应用程序调用不存在的事件方法,因为它不是那样的种类。例如,如果你打电话event.button()之前没有确定它是QEvent.MouseButtonPress你的应用程序当然会中断。
还有其他方法可以做到这一点,这些是最知名的方法。
| 归档时间: |
|
| 查看次数: |
11801 次 |
| 最近记录: |