2021年2月18日

Python Qt (PySide) 起手勢

在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的實體中。

程式碼: