MousePressEvent 在 QPushbutton 上不起作用
Posted
技术标签:
【中文标题】MousePressEvent 在 QPushbutton 上不起作用【英文标题】:MousePressEvent not working on QPushbutton 【发布时间】:2020-08-13 08:24:43 【问题描述】:所以在我的 qtgui 中,我想知道何时有人点击(在任何 QObject 或窗口上), 因此,我正在使用 MousePressEvent。 但是,当我单击 QPushbuttons 时,无法识别该事件
我的代码有一个更简单的版本
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import os
from PyQt5.QtWidgets import QMainWindow
class Ui_MainWindow(QMainWindow):
def __init__(self):
super(Ui_MainWindow,self).__init__()
def setupUi(self):
self.setObjectName("MainWindow")
self.resize(1920, 1080)
self.setStyleSheet("\n"
"")
self.centralwidget = QtWidgets.QWidget(self)
#self.centralwidget.setStyleSheet("#centralwidgetbackground-image: url(:/images/assets/back1.jpg);")
self.centralwidget.setObjectName("centralwidget")
self.timer = 5000
self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout_3.setObjectName("gridLayout_3")
self.but1 = QtWidgets.QPushButton(self.centralwidget)
self.but1.setGeometry(QtCore.QRect(1500, 500, 301, 51))
self.but1.setMouseTracking(True)
self.but1.setStyleSheet("QPushButton\n"
"border-style: outset;""\n"
" border-radius: 10px;"
"border-width: 2px;"
"border-color: gray;"
"font: 18pt \"Adobe Pi Std\";\n"
"color: rgb(255, 255, 255);\n"
"QPushButton:pressed border-style : inset; border-color:black")
self.but1.setObjectName("but1")
self.but1.clicked.connect(lambda : self.addtimer())
self.setCentralWidget(self.centralwidget)
self.retranslateUi()
QtCore.QMetaObject.connectSlotsByName(self)
def mousePressEvent(self,event):
#super(Ui_MainWindow,self).mousePressEvent(event) i tried this but change nothing
print("Clicked")
def addtimer(self):
self.timer+=5000
print(self.timer)
def retranslateUi(self):
_translate = QtCore.QCoreApplication.translate
self.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.but1.setText(_translate("MainWindow", "Explore!"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = Ui_MainWindow()
ui.setupUi()
ui.show()
sys.exit(app.exec_())
我非常相信这个问题是由不好的继承引起的,但我不知道如何解决它。
如果你想知道为什么我想知道任何时候有人点击,那么主要目的是设置一个 Qtimer,如果在 x 时间后没有点击,它将关闭窗口
提前致谢
【问题讨论】:
【参考方案1】:您需要做的是确定您要检查哪种鼠标事件,然后转到 pyqt5 文档并搜索执行该操作的事件(这就是我所做的),然后仅编码检测该事件的逻辑。
#Below your other self.but1... u add this one to call the function each time u click
self.but1.clicked.connect(lambda: self.mousePressEvent(QMouseEvent.MouseButtonPress))
def mousePressEvent(self, event):
#Here you check if the event u receive its the one you want to track
if event == QMouseEvent.MouseButtonPress:
print("Clicked")
希望此解决方案对您有所帮助。
【讨论】:
嗯,它显然有效,谢谢!然而这种方法看起来有点“沉重”。事实上,我可能有很多按钮。我要等一下,如果没有人提供另一种解决方案,我会将您的答案标记为已接受。再次感谢 按下按钮时,它与 QMouseEvent.MouseButtonPress 匹配,如果您查看文档,则与数字“2”相同。刚刚根据您的问题快速解答。以上是关于MousePressEvent 在 QPushbutton 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
未调用 QGraphicsView 的 MousePressEvent
在 QTableWidgetItem 中设置 mousePressEvent 处理程序
MousePressEvent 在 QPushbutton 上不起作用
使用 mousePressEvent() 和 mouseReleaseEvent() 在 QTextBrowser 中选择文本