PyQt4中连接QMessageBox调用slot方法失败
Connecting in PyQt4 QMessageBox fails to call the slot method
我试图分析此处引用的示例代码:PyQt - QMessageBox
这是片段:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Window(QMainWindow):
def __init__(self):
super().__init__()
w = QWidget()
b = QPushButton(self)
b.setText("Show message!")
b.clicked.connect(self.showdialog)
w.setWindowTitle("PyQt Dialog demo")
def showdialog(self):
msg = QMessageBox()
msg.setIcon(QMessageBox.Question)
# self.connect(msg, SIGNAL('clicked()'), self.msgbtn)
msg.buttonClicked.connect(self.msgbtn)
msg.exec_()
def msgbtn(self, i):
print("Button pressed is:", i.text())
if __name__ == '__main__':
app = QApplication([])
w = Window()
w.show()
app.exec_()
在 PyQt 中有两种方法可以将信号连接到槽。对于按钮,它是:
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)
或
widget.clicked.connect(slot_function)
以第二种方式使用它效果很好:msgbtn
插槽方法按预期调用。但是,如果我尝试将其更改为更常见的 'PyQt-onic' 连接方式(即第一种 - 我在代码片段中将其注释掉),则永远不会调用插槽方法。谁能帮我解决这个问题?
您传递给 SIGNAL 的信号不正确,QMessageBox 没有点击信号但信号是 buttonClicked (QAbstractButton *)
所以正确的是:
self.connect(msg, SIGNAL("buttonClicked(QAbstractButton *)"), self.msgbtn)
另一方面这不是PyQt-onic风格,而是不推荐使用的旧风格,但我们建议使用新风格。
旧样式:
self.connect(msg, SIGNAL("buttonClicked(QAbstractButton *)"), self.msgbtn)
新款式:
msg.buttonClicked.connect(self.msgbtn)
有关详细信息,请阅读 docs。
我试图分析此处引用的示例代码:PyQt - QMessageBox 这是片段:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class Window(QMainWindow):
def __init__(self):
super().__init__()
w = QWidget()
b = QPushButton(self)
b.setText("Show message!")
b.clicked.connect(self.showdialog)
w.setWindowTitle("PyQt Dialog demo")
def showdialog(self):
msg = QMessageBox()
msg.setIcon(QMessageBox.Question)
# self.connect(msg, SIGNAL('clicked()'), self.msgbtn)
msg.buttonClicked.connect(self.msgbtn)
msg.exec_()
def msgbtn(self, i):
print("Button pressed is:", i.text())
if __name__ == '__main__':
app = QApplication([])
w = Window()
w.show()
app.exec_()
在 PyQt 中有两种方法可以将信号连接到槽。对于按钮,它是:
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)
或
widget.clicked.connect(slot_function)
以第二种方式使用它效果很好:msgbtn
插槽方法按预期调用。但是,如果我尝试将其更改为更常见的 'PyQt-onic' 连接方式(即第一种 - 我在代码片段中将其注释掉),则永远不会调用插槽方法。谁能帮我解决这个问题?
您传递给 SIGNAL 的信号不正确,QMessageBox 没有点击信号但信号是 buttonClicked (QAbstractButton *)
所以正确的是:
self.connect(msg, SIGNAL("buttonClicked(QAbstractButton *)"), self.msgbtn)
另一方面这不是PyQt-onic风格,而是不推荐使用的旧风格,但我们建议使用新风格。
旧样式:
self.connect(msg, SIGNAL("buttonClicked(QAbstractButton *)"), self.msgbtn)
新款式:
msg.buttonClicked.connect(self.msgbtn)
有关详细信息,请阅读 docs。