为什么Windows /对话框不属于PyQt类创建的类?

时间:2013-05-12 04:50:54

标签: python qt pyqt pyqt4

我对Qt相当新。我在Gtk3中用内省和Glade UI设计器构建了一些东西。

现在,我正在尝试学习PyQt。虽然我喜欢它如何让你的Ui成为一个班级(似乎更容易管理我),但令我困惑的是。当我使用pyuic4(创建可执行文件)标志运行-x时,它有以下代码:

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    _fromUtf8 = lambda s: s

class Ui_multippp(object):
    def setupUi(self, multippp):
        multippp.setObjectName(_fromUtf8("multippp"))
        multippp.resize(371, 43)
        self.verticalLayout = QtGui.QVBoxLayout(multippp)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.label = QtGui.QLabel(multippp)
        self.label.setObjectName(_fromUtf8("label"))
        self.verticalLayout.addWidget(self.label)
        self.verticalLayout_2 = QtGui.QVBoxLayout()
        self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2"))
        self.verticalLayout.addLayout(self.verticalLayout_2)

        self.retranslateUi(multippp)
        QtCore.QMetaObject.connectSlotsByName(multippp)

    def retranslateUi(self, multippp):
        multippp.setWindowTitle(QtGui.QApplication.translate("multippp", "Multiple PPP Accounts", None, QtGui.QApplication.UnicodeUTF8))
        self.label.setText(QtGui.QApplication.translate("multippp", "More than one PPP account found, please select one:", None, QtGui.QApplication.UnicodeUTF8))


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    multippp = QtGui.QDialog()
    ui = Ui_multippp()
    ui.setupUi(multippp)
    multippp.show()
    sys.exit(app.exec_())

我在这个(生成的)代码中试图理解的是为什么multippp对话框不是包含所有其他小部件的类的一部分。相反,我可以告诉你,你把它交给QDialog,然后把它雕刻成你想要的东西。将QDialog分开是否有利,如果是,那么这个优势是什么?

1 个答案:

答案 0 :(得分:0)

子小部件需要一个小部件容器,如QMainWindow或QDialog。但是,您也可以将窗口小部件用作顶级窗口小部件。 QDialog就在那里,因为pyuic4不知道你打算如何使用这个设计的小部件。

在您的程序中,QDialog可以是任何其他小部件容器。您也可以子类化multippp。

要最终确定,QDialog只是执行代码的父级。