PyQt4 精彩例項分析* 例項9 利用Qt Designer設計一個對話方塊
在Qt程式設計中,程式設計師通常都是使用手動編寫Python原始碼來進行Qt程式開發,但有些程式設計師也喜歡使用視覺化的方法進行對話方塊設計,因此,Qt為習慣利用視覺化方式進行視窗程式設計的程式設計師提供了Designer,它可以給一個應用程式提供全部或者部分對話方塊。用Qt Designer設計的對話方塊和用Python寫程式碼寫成的對話方塊是一樣的,可以用作一個常用的工具,並不對編輯產生影響。使用Qt Designer可以方便快速地對對話方塊進行修改,在對話方塊經常需要變化的情況下,這是一種很好的方式。使用Qt Designer設計對話方塊一般都有如下幾個步驟:
1)建立窗體並在窗體中放置各種控制元件。
2)對窗體進行佈局設計。
3)設定各控制元件的標籤順序。
4)建立訊號和槽。
5)連線訊號和槽。
Qt Designer的啟動可以通過命令列執行designer完成,或Windows下的開始選單完成,啟動後介面如下圖所示。
Qt Designer提供如下5種表單模板可供選擇:
1)底部帶“確定”,“取消”按鈕的對話方塊窗體。
2)右側帶“確定”,“取消”按鈕的對話方塊窗體。
3)不帶按鈕的對話方塊窗體。
4)Main Window型別窗體。
5)通用窗體。
這裡選擇建立一種不帶按鈕的對話方塊窗體,接下來需要做的就是在窗體中放置各種需要的控制元件,Qt Designer的設計空間列出了所有控制元件以及各控制元件的屬性設定窗體。在窗體中放置一個Label和LineEdit,兩個PushButton和一個Horizontal Spacer控制元件,並設定種控制元件的text屬性,如下圖所示。在開始向窗體中放置控制元件時,不用太在意控制元件對齊與否,只用放置大概位置即可。
接下來對窗體的各個控制元件進行佈局設計,選擇位於同一行的所有控制元件,選擇Qt Designer選單中的“窗體”-->“水平佈局”或右擊選擇“佈局”-->“水平佈局”,然後選擇兩個水平佈局,右擊選擇“佈局”-->“柵格佈局”,完成所選控制元件的水平佈局。完成佈局設計後適當調整整個窗體的大小,以適合控制元件的大小,如下圖所示。
然後對各控制元件的標籤順序進行設定,選擇Qt Designer選單中的“編輯”--> “編輯Tab順序“,進入標籤設定模式,窗體中各個控制元件上出現一個藍色的小框,框內的數字表示該控制元件的標籤順序,即焦點順序,如下圖所示,可以單擊藍色小框修改標籤順序。完成標籤順序設定後選擇Qt
Designer選單中的“編輯”-->“編輯視窗部件”離開標籤設定模式。
接下來進行訊號和槽的連線,選擇Qt
Designer選單中的“編輯”-->“編輯訊號/槽”,進入訊號/槽連線模式,如下圖所示。此時單擊OK按鈕,然後拖動滑鼠,可以發現有一根紅色的類似接地線的標誌線被拖出,鬆開滑鼠,彈出訊號/槽的連線配置視窗,如下圖所示。
連線配置視窗左側列出了按鈕OK的所有訊號,右側列出了對話方塊的所有槽,選擇OK按鈕的clicked()訊號和右側的accept(),單擊“確定”按鈕,此時完成按鈕OK的訊號/槽的連線,用同樣的方式配置按鈕Cancel的訊號/槽,如下圖所示。
至此,關於Qt Designer的操作就結束了,生成一個.ui檔案,儲存為9.ui。
然後使用pyuic4命令生成一個py檔案,如下圖所示。
接下來編寫一個9.py主檔案來執行這個程式。具體實現程式碼如下:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
import ui_9
class TestDialog(QDialog,ui_9.Ui_Dialog):
def __init__(self,parent=None):
super(TestDialog,self).__init__(parent)
self.setupUi(self)
app=QApplication(sys.argv)
dialog=TestDialog()
dialog.show()
app.exec_()
執行後分別單擊OK和Cancel按鈕,執行對話方塊的accept()和reject()函式,如下圖所示。
使用Qt Designer設計對話方塊是一種簡單有效的方法,可以節省設計對話方塊的時間,而且修改方便,直觀,對於初學者來說,這是一種入門的好方法。但隨著程式越來越複雜,Qt Designer也有不利的地方:首先,使用Qt Designer生成的程式碼比較龐大,很多程式碼是自動生成的,不利於開發者閱讀,其次對於初學者而言,使用Qt Designer不利於掌握Qt程式設計的本質(類似於.NET)。因此,筆者還是建議晝使用手動的方式編寫原始碼,這樣能更好地理解Qt程式設計的本質,更多地體驗Qt程式設計的樂趣。本書的絕大部分例項都是採用手動編寫程式碼的方式進行實現的。