Python PyQT中事件源的识别
我从PyQt4开始,现在我对事件有一个问题 我有一个主类,比如说主窗口。主窗口有ButtonX类型的按钮列表(固有表单QPushButton)。我想实现两个解决方案之一(取决于哪个更容易) 1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮) 2) 第二种解决方案是运行ButtonX类中定义的方法 我尝试的是:Python PyQT中事件源的识别,python,user-interface,qt,pyqt,pyqt4,Python,User Interface,Qt,Pyqt,Pyqt4,我从PyQt4开始,现在我对事件有一个问题 我有一个主类,比如说主窗口。主窗口有ButtonX类型的按钮列表(固有表单QPushButton)。我想实现两个解决方案之一(取决于哪个更容易) 1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮) 2) 第二种解决方案是运行ButtonX类中定义的方法 我尝试的是: QtCore.QObject.connect(self.getButton(0, 0), QtCore.SIGNAL("clic
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"))
1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮)
您可以使用访问事件源。但是,正如说明所示,使用或以更面向对象的方式做事情通常更好
2) 第二种解决方案是运行ButtonX类中定义的方法
仔细查看您为第一个connect调用的最后一个参数键入的内容:
self.getButton(0, 0).buttonMethod()
上面将使用参数0、0
计算getButton
,然后在该对象上调用buttonMethod
方法。因此,除非buttonMethod
返回一个方法,否则您将使用buttonMethod
的返回值作为connect调用的最后一个参数。如果这个方法返回一个函数,那么就可以了
相反,我希望看到如下情况:
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()
1) 单击列表中的一个按钮后,我想运行MainWindow的一个方法。我希望能够阅读事件的来源(识别点击按钮)
您可以使用访问事件源。但是,正如说明所示,使用或以更面向对象的方式做事情通常更好
2) 第二种解决方案是运行ButtonX类中定义的方法
仔细查看您为第一个connect调用的最后一个参数键入的内容:
self.getButton(0, 0).buttonMethod()
上面将使用参数0、0
计算getButton
,然后在该对象上调用buttonMethod
方法。因此,除非buttonMethod
返回一个方法,否则您将使用buttonMethod
的返回值作为connect调用的最后一个参数。如果这个方法返回一个函数,那么就可以了
相反,我希望看到如下情况:
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.buttonwapressed)
我使用PyQt5,我收到一个错误,说发送方不存在。是否有任何解决方法。在qt4中,您可以使用新样式的插槽和信号,在您的示例中,它看起来像:self.b1.clicked.connect(self.buttonwarpressed)
我使用PyQt5时,收到一个错误,说发件人不存在。是否有解决方法。