2013-05-12 40 views
1

我對Qt相當陌生。我用自省和Glade UI設計器在Gtk3中構建了一些東西。現在爲什麼窗口/對話框不是PyQt創建的類的一部分?

,我努力學習的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分開是否有優勢,如果有的話,那有什麼優勢?

+0

我認爲它只是試圖模仿C++接口。 – icktoofay 2013-05-12 05:02:27

+0

@icktoofay C++接口是否有這樣的理由? (我知道一些C++,但不是一噸,所以也許我錯過了明顯的東西?) – Azendale 2013-05-12 14:08:17

+1

那麼,通常你會有你寫的代碼和自動生成的UI代碼。很顯然,Qt不想編​​輯你的代碼來拼接它的小部件引用,所以他們只是產生了另一個類。我想他們仍然希望你的代碼是擴展這個小部件的代碼,所以你可以重寫這個小部件的方法。這些約束迫使它成爲一個單獨的類,它持有對小部件的所有引用,但它本身不能是小部件。 – icktoofay 2013-05-12 21:13:25

回答

0

子小部件需要像QMainWindow或QDialog這樣的小部件容器。但是,您也可以將小部件用作頂級小部件。 QDialog在那裏,因爲pyuic4不知道你打算如何使用這個設計的部件。

在你的程序中QDialog可以是任何其他的widget容器。你也可以繼承multippp。

要最終確定,QDialog只是父母來執行您的代碼。

相關問題