PyQt - QDialogBu​​ttonBox信号和工具提示

时间:2016-09-29 00:33:57

标签: python pyqt

我有几个关于qDialogBu​​ttonBox的问题。虽然我的代码仍然有效,但我相信有一些部分可以更好地完善/我在网上找不到更多信息

class testDialog(QtGui.QDialog):
    def __init_(self, parent=None):
        ...
        self.init_ui()
        self.signals_connection()

    def init_ui(self):
        ...
        self.buttonBox = QtGui.QDialogButtonBox()
        self.buttonBox.addButton("Help", QtGui.QDialogButtonBox.HelpRole)
        self.buttonBox.addButton("Apply", QtGui.QDialogButtonBox.AcceptRole)
        self.buttonBox.addButton("Cancel", QtGui.QDialogButtonBox.RejectRole)
        #

    def signals_connection(self):
        self.test_random.clicked.connect(self.test_rand)

        # Is this the latest/correct way to write it?
        self.buttonBox.accepted.connect(self.test_apply)
        self.buttonBox.rejected.connect(self.test_cancel)
        self.buttonBox.helpRequested.connect(self.test_help)

    def test_apply(self):
        print "I am clicking on Apply"

    def test_cancel(self):
        print "I am clicking on Cancel"
        self.close()

    def test_help(self):
        print "I am clicking for Help!"

我的问题如下:

  1. 在我的函数 - signals_connection()下,我写的行 buttonBox(尽管代码仍然有效)是完全不同的 对于我为self.test_random所写的信号,我是 无法找到任何类似的在线qdialogbuttonbox ..那里 是我发现的另一种风格 - self.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), self, QtCore.SLOT("accept()"))但是我 认为那是老风格?否则应该是正确的方法 写吗?
  2. 在我的test_cancel()函数中,写self.close()是最好的 关闭应用程序的方法?我运行程序的方式是 如下:

    dialog = testDialog();dialog.show()

  3. 最后,是否可以为我创建的3个按钮添加3个不同的工具提示?我看到有一个命令 - self.buttonBox.setToolTip("Buttons for life!"),但这会导致所有3个按钮都有相同的工具提示。我可以个人化吗?

1 个答案:

答案 0 :(得分:4)

  1. 是的,这是写信号连接的正确方法(你发现的其他语法确实是旧方法)。您可以在QDialogButtonBox的pyqt文档中找到所有信号。不同的小部件和对象具有不同的信号。 QPushButton&{39}和QDialogButtonBox有不同的信号。

  2. 是的,close()将关闭对话框。如果没有其他窗口打开,QApplication将默认退出。但是,如果这是模式对话框,则通常需要使用acceptreject命令关闭对话框。这将通过调用函数提示是否使用Ok/Yes/Apply按钮关闭了对话框,或者使用“否/取消”按钮关闭了对话框。按钮。

  3. 您可以为QDialogButtonBox中的不同按钮设置不同的工具提示。您只需要获得要为其设置工具提示的特定按钮的引用。

  4. 例如

    self.buttonBox.button(QDialogButtonBox.Help).setToolTip('Help Tooltip')
    self.buttonBox.button(QDialogButtonBox.Ok).setToolTip('Apply Tooltip')
    

    或者你可以遍历所有按钮

    for button in self.buttonBox.buttons():
        if button.text() == 'Help':
            button.setToolTip('Help Tooltip')
        elif button.text() == 'Apply':
            button.setToolTip('Apply Tooltip')
    

    此外,您可以将acceptedrejected信号从QDialogButtonBox连接到accept上的rejectQDialog个广告位/ p>

    self.buttonBox.accepted.connect(self.accept)
    self.buttonBox.rejected.connect(self.reject)
    

    这样,您就不必手动将OkCancel按钮连接到回调以关闭对话框。