【问题标题】:Recognition source of event in PyQTPyQT中事件的识别来源
【发布时间】:2010-05-26 22:28:03
【问题描述】:

我从 PyQt4 开始,现在我遇到了事件问题。

我有一个主类,比如说 MainWindow。 MainWindow 有一个 ButtonX 类型的按钮列表(继承形式 QPushButton)。我想实现两种解决方案之一(取决于哪个更容易)。

1) 单击列表中的一个按钮后,我想运行 MainWindow 的一种方法。我希望能够在那里读取事件源(识别单击的按钮)

2) 第二种解决方案是运行 ButtonX 类中定义的方法。

我尝试的是:

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0).buttonMethod())

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue()"))

甚至这一行也出现了暂停 Python 解释器

QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clicked()"), self.getButton(0, 0), QtCore.SLOT("incrementValue"))

【问题讨论】:

    标签: python user-interface qt pyqt pyqt4


    【解决方案1】:

    1) 单击列表中的一个按钮后,我想运行 MainWindow 的一种方法。我希望能够在那里读取事件源(识别单击的按钮)

    您可以使用QObject.sender() 访问事件源。但是,正如说明所示,使用QSignalMapper 或以更面向对象的方式做事通常会更好。

    2) 第二种解决方案是运行 ButtonX 类中定义的方法。

    仔细查看您为第一个连接调用的最后一个参数键入的内容:

    self.getButton(0, 0).buttonMethod()
    

    上面将使用参数0, 0 评估getButton,然后在该对象上调用 buttonMethod 方法。因此,除非buttonMethod 返回一个方法,否则您将使用buttonMethod 的返回值作为连接调用的最后一个参数。如果这个方法返回一个函数,那么这很好。

    相反,我希望看到如下内容:

    self.getButton(0, 0).buttonMethod # note no parenthesis at end
    

    查看 PyQt 提供的 PyQt 示例目录,因为它们将演示确切的语法并作为很好的示例。

    这是一个小例子:

    class MW(QMainWindow):
        def __init__(self, *args)
            QMainWindow.__init__(self, *args)
            layout = QHBoxLayout(self)
            self.b1 = QPushButton("Button1")
            self.b2 = QPushButton("Button2")
            layout.addWidget(self.b1)
            layout.addWidget(self.b2)
            self.connect(self.b1, SIGNAL("clicked()"), self.buttonWasPressed)
            self.connect(self.b2, SIGNAL("clicked()"), self.buttonWasPressed)
    
        def buttonWasPressed(self):
            print "button %s was pressed" % self.sender()
    

    【讨论】:

    • 在 qt4 中,您可以使用新样式的插槽和信号,在您的示例中,它看起来像:self.b1.clicked.connect(self.buttonWasPressed)
    • 我使用 PyQt5,但我收到一条错误消息说发件人不存在..有什么解决方法吗。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多