在Python討論區看到有人用PySide實作視窗程式,因此嘗試用PySide寫出Python版本的Qt樣板程式。
用過QtCreator的會發現,產生QWidget (或QDialog) 的Project後,會產生一個預設樣式的程式碼框架,但在PySide上,比較少看到,尤其加上Qt Designer之後,pyside-uic會產生UI Python程式碼,如何和其他程式碼整合,是個入門的門檻,因此寫一個PySide版的Template和作法。
PySide Template程式碼分3塊:
1. Main主程式
2. Dialog主體
3. Qt Designer產生的Dialog內容
Main主程式:
import sys
from PySide.QtGui import *
from PySide.QtCore import *
from main_widget import MainWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
main_widget = MainWidget()
main_widget.show()
sys.exit(app.exec_())
Dialog主體:
from PySide.QtGui import *
from PySide.QtCore import *
from ui_text_dialog import Ui_Dialog
class MainWidget(QDialog):
ui = Ui_Dialog()
def __init__(self):
QDialog.__init__(self)
self.ui.setupUi(self)
self.ui.CloseButton.setText("關閉視窗")
self.ui.CloseButton.clicked.connect(self.on_CloseButton_clicked)
def on_CloseButton_clicked(self):
QApplication.exit(0)
Qt Designer產生的Dialog內容:
Qt設計師產生後,儲存的檔名以ui_開頭做為區別。
框架原理如下:
Main主程式內等同於Qt的main.cpp,主要放的是QApplication和包含Config在內其他初始化程式。
Dialog程式內放的是實際視窗的程式,等同於Qt的widget.cpp(dialog.cpp)和widget.h(dialog.h),實際的視窗程式所在,包括視窗功能,Signal/Slot定義、連接、動作都寫在這裡。
Dialog程式內的關鍵有3個:
1. 繼承QDialog
class MainWidget(QDialog)
2. 在 __init__(self) 建構子內,要呼叫QDialog的建構子
QDialog.__init__(self)
3. 透過 setupUi() 把 Qt Designer 的 ui_dialog 整個載入,並把dialog指定到 Qt Designer 的 ui_dialog
self.ui.setupUi(self)
Qt Designer產生的ui_dialog,直接由Qt Designer產生就能套用,objectName要設定,Signal/Slot不寫在這,直接寫在Dialog的實體中。
程式碼:
沒有留言:
張貼留言