【发布时间】:2011-04-22 22:20:08
【问题描述】:
我正在尝试向我当前的 GUI 添加一个自定义对话框,可以启动该对话框供用户设置一些参数。理想情况下,我想使用 QtDesigner 创建自定义对话框。下面是pyuic4从QtDesigner ui代码中为对话框生成的代码。
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(508, 300)
self.buttonBox = QtGui.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.label = QtGui.QLabel(Dialog)
self.label.setGeometry(QtCore.QRect(10, 120, 181, 31))
font = QtGui.QFont()
font.setPointSize(16)
self.label.setFont(font)
self.label.setObjectName("label")
self.sl_value = QtGui.QSlider(Dialog)
self.sl_value.setGeometry(QtCore.QRect(220, 120, 161, 31))
self.sl_value.setOrientation(QtCore.Qt.Horizontal)
self.sl_value.setObjectName("sl_value")
self.ed_value = QtGui.QLineEdit(Dialog)
self.ed_value.setGeometry(QtCore.QRect(400, 120, 41, 31))
font = QtGui.QFont()
font.setPointSize(16)
self.ed_value.setFont(font)
self.ed_value.setObjectName("ed_value")
self.retranslateUi(Dialog)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "Set example value:", None, QtGui.QApplication.UnicodeUTF8))
这是保存在Sub2.py
然后,在我的主要 python 文件中,添加
from Sub2 import Ui_Dialog
我使用以下代码创建了一个名为 StartSub2 的新类
class StartSub2(QtGui.QDialog):
def __init__(self,parent=None):
QtGui.QDialog.__init__(self,parent)
self.ui = Ui_Dialog
self.ui.setupUi(self)
最后,在我的主 GUI 中,有一个带有以下代码的函数应该启动对话框
def exampleSubGui(self):
dialog = StartSub2(self)
result = dialog.exec_()
请注意,对话框尚未完成。一旦我解决了如何启动它,我将为滑块和编辑框添加信号/插槽连接。另外,如果我理解正确的话,我需要重载accept() 方法来返回用户的输入。
我遇到的第一个问题是StartSub2 的__init__ 方法。我收到以下错误:
TypeError: unbound method setupUi() must be called with Ui_Dialog instance as
first argument (got StartSub2 instance instead)
我正在尝试采用与主 GUI 相同的方法,即使用以下代码
class StartQT4(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
但这并没有抱怨setupUi() 得到一个StartQT4 实例而不是Ui_MainWindow 实例。谁能解释完成我想做的事情的正确方法?或者有人可以指出一个明确的例子或参考吗?如果您需要更多信息或说明,请告诉我。
【问题讨论】:
标签: python user-interface pyqt4