在PyQt4 QMessageBox中连接无法调用slot方法

2024-09-28 22:38:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图分析这里引用的示例代码: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中的插槽。对于按钮,它是:

^{pr2}$

或者

widget.clicked.connect(slot_function)

第二种方法可以很好地工作:按预期调用msgbtnslot方法。但是,如果我尝试将其更改为更常用的“PyQt onic”连接方式(即第一种方式-我在片段中注释了它),则永远不会调用slot方法。有人能帮我解决这个问题吗?在


Tags: 方法fromimportselfinitdefconnectmsg
1条回答
网友
1楼 · 发布于 2024-09-28 22:38:08

传递给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。在

相关问题 更多 >