关于qDialogButtonBox,我有几个问题。虽然我的代码仍然有效,但我相信可以改进一些部分/我在网上找不到太多信息
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)
我的问题如下:
buttonBox(尽管代码仍然有效)self.test_random 与我为编写的信号完全不同,并且无法在qdialogbuttonbox的网上找到任何类似的行。我发现的样式- self.connect(self.buttonBox,
QtCore.SIGNAL("accepted()"), self, QtCore.SLOT("accept()"))但我认为那是旧样式?否则,什么是正确的书写方式?在我的test_cancel()函数中,是编写self.close()关闭应用程序的最佳方法吗?我运行程序的方式如下:
dialog = testDialog();dialog.show()
最后,是否可以在我创建的3个按钮中添加3个不同的工具提示?我看到有一个命令- self.buttonBox.setToolTip("Buttons for life!"),但这将导致所有3个按钮具有相同的工具提示。我可以单独制作吗?
是的,这是编写信号连接的正确方法(您发现的另一种语法确实是做旧的方法)。您可以在的pyqt文档中找到所有信号QDialogButtonBox。不同的小部件和对象具有不同的信号。 QPushButton和QDialogButtonBox的信号不同。
是的,close()将关闭对话框。该QApplication如果没有其他窗口将打开默认情况下退出。但是,如果这是模式对话框,则通常希望使用accept或reject命令关闭对话框。这将提醒调用函数有关对话框是通过Ok/Yes/Apply按钮关闭还是通过按钮关闭No/Cancel。
您可以为中的不同按钮设置不同的工具提示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)
此外,您可以连接accepted和rejected信号来自QDialogButtonBox于accept和reject插槽上QDialog
self.buttonBox.accepted.connect(self.accept)
self.buttonBox.rejected.connect(self.reject)
Run Code Online (Sandbox Code Playgroud)
这样,您无需手动将Ok和Cancel按钮连接到回调即可关闭对话框。