PyQt,Qwidget上的点击操作

11

我有这个简单的问题,我可以获取按钮点击事件,但现在我需要处理窗口小部件的点击事件,以下是代码的一部分:

self.widget = QtGui.QWidget(self)
self.widget.setStyleSheet("QWidget { background-color: %s }" % color.name())
self.widget.setGeometry(150, 22, 50, 50)
self.connect(???)  <-- here

我该在"???"中放什么来捕获创建的小部件上的点击动作?

2个回答

22

你可以尝试这个。 我从这篇博客文章的评论框中找到了Jared Glass的建议。对我来说它完美地运行。

self.widget.mouseReleaseEvent=self.myfunction
或者
self.widget.mouseReleaseEvent=lambda event:print 'working'
或者
self.widget.mouseReleaseEvent=lambda event,my_variable:self.myfunction(event,my_variable)

只有最后一个示例是我自己编写的,其余都在 http://popdevelop.com/2010/05/an-example-on-how-to-make-qlabel-clickable/ 中提到。 最后的代码可以帮助您传递任何变量,例如:如果存在多个小部件,则为小部件名称或小部件编号。


这太棒了!像梦一样顺畅。 - Darren Haynes
@Ja8zyjits最后一个似乎对我不起作用。我认为默认情况下mouseReleaseEvent只是传递事件。你认为我需要重写小部件的mouseReleaseEvent来传递额外的参数吗? 以其当前形式,它会显示 “TypeError:<lambda>()缺少1个必需的位置参数:'my_variable'” - Tanvir
1
@Tanvir,我相信我们正在为mouseReleaseEvent分配一个新的定义,并且我们正在传递所需的变量。这是在注册事件时完成的。 - Ja8zyjits
@Ja8zyjits,有没有其他发送变量的方法? - raphiel

8
使用mousePressEvent代替。
import sys

from PyQt4.QtGui import QWidget, QApplication

class MyWidget(QWidget):
    def mousePressEvent(self, event):
        print "clicked"

app = QApplication(sys.argv)

widget = MyWidget()
widget.show()

app.exec_()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接