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

dis*_*dia 3 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!"
Run Code Online (Sandbox Code Playgroud)

我的问题如下:

  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个按钮具有相同的工具提示。我可以单独制作吗?

Bre*_*bel 6

  1. 是的,这是编写信号连接的正确方法(您发现的另一种语法确实是做旧的方法)。您可以在的pyqt文档中找到所有信号QDialogButtonBox。不同的小部件和对象具有不同的信号。 QPushButtonQDialogButtonBox的信号不同。

  2. 是的,close()将关闭对话框。该QApplication如果没有其他窗口将打开默认情况下退出。但是,如果这是模式对话框,则通常希望使用acceptreject命令关闭对话框。这将提醒调用函数有关对话框是通过Ok/Yes/Apply按钮关闭还是通过按钮关闭No/Cancel

  3. 您可以为中的不同按钮设置不同的工具提示QDialogButtonBox。您只需要获取要为其设置工具提示的特定按钮的参考即可。

例如

self.buttonBox.button(QDialogButtonBox.Help).setToolTip('Help Tooltip')
self.buttonBox.button(QDialogButtonBox.Ok).setToolTip('Apply Tooltip')
Run Code Online (Sandbox Code Playgroud)

或者您可以遍历所有按钮

for button in self.buttonBox.buttons():
    if button.text() == 'Help':
        button.setToolTip('Help Tooltip')
    elif button.text() == 'Apply':
        button.setToolTip('Apply Tooltip')
Run Code Online (Sandbox Code Playgroud)

此外,您可以连接acceptedrejected信号来自QDialogButtonBoxacceptreject插槽上QDialog

self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
Run Code Online (Sandbox Code Playgroud)

这样,您无需手动将OkCancel按钮连接到回调即可关闭对话框。