布局管理入門
在上節(jié)中我們只介紹了一個(gè)按鈕控件,如果需要更多的控件,則可以從左側(cè)的Widget Box(工具箱)中進(jìn)行拖曳。本節(jié)重點(diǎn)介紹對(duì)這些控件的布局。
Qt Designer提供了4種窗口布局方式,分別是:Vertical Layout(垂直布局)、Horizontal Layout(水平布局)、Grid Layout(柵格布局)和Form Layout(表單布局)。它們位于Qt Designer主窗口左側(cè)區(qū)域的Widget Box(工具箱)里的Layouts(布局)欄中,如圖所示。

垂直布局(Vertical Layout):控件默認(rèn)按照從上到下的順序進(jìn)行縱向添加。
水平布局(Horizontal Layout):控件默認(rèn)按照從左到右的順序進(jìn)行橫向添加。
柵格布局(Grid Layout):將窗口控件放入一個(gè)網(wǎng)格之中,然后將它們合理地劃分成若干行(row)和列(column),并把其中的每個(gè)窗口控件放置在合適的單元(cell)中,這里的單元即是指由行和列交叉所劃分出來的空間。
表單布局:控件以兩列的形式布局在表單中,其中左列包含標(biāo)簽,右列包含輸入控件。
一般進(jìn)行布局有兩種方式:一是通過布局管理器進(jìn)行布局;二是通過容器控件進(jìn)行布局。
1、使用布局管理器
以水平布局為例,打開Qt Designer,新建一個(gè)QWidget控件,然后在其中放入兩個(gè)子控件:一個(gè)文本框(lineEdit)和一個(gè)按鈕( pushButton)。選中這兩個(gè)控件,然后單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“布局”的子菜單就可以指定該控件的布局方式了,此處選擇“水平布局”,如圖所示。

將.ui文件轉(zhuǎn)換成.py文件后,可以看到如下內(nèi)容。本例文件名為MainWin01.py。
可以看到,子控件QpushButton(按鈕)和 QlineEdit(文本框)在構(gòu)建的時(shí)候指定的父控件對(duì)象就是 QWidget,布局對(duì)象QHBoxLayout指定的父控件對(duì)象也是QWidget。這與在 Qt Designer的對(duì)象查看器中看到的對(duì)象依賴關(guān)系是一樣的,如圖所示。

當(dāng)然,也可以直接拖拽Layouts下面的工具框,進(jìn)行快速布局,例如:放入一個(gè)水平布局框,然后一次放入三個(gè)Button,會(huì)自動(dòng)水平對(duì)齊,如圖:

同理,自行嘗試做出如下效果:

2、使用容器進(jìn)行布局
所謂容器控件,就是指能夠容納子控件的控件。使用容器控件,目的是將容器控件中的控件歸為一類,以有別于其他控件。當(dāng)然,容器控件也可以對(duì)其子控件進(jìn)行布局,只不過沒有布局管理器常用。下面對(duì)其進(jìn)行簡單介紹。
同樣以水平布局為例,新建一個(gè) MainWindow,從左側(cè)容器(Containers)導(dǎo)航欄拖入一個(gè) Form控件,然后在Form 控件中放入 Label、LincEdit、Button控件,并對(duì)其進(jìn)行重命名,如圖所示。

本例文件名為 ContainersWin.ui。將 ContainersWin.ui編譯為ContainersWin.py,代碼如下:
注意容器QFrame與子控件之間有一個(gè) QHBoxLayout。可以看到,使用容器進(jìn)行控件布局本質(zhì)上還是調(diào)用布局管理器進(jìn)行的。
雖然布局管理器在某些時(shí)候方便了我們的操作,但是我們?cè)诓季謺r(shí),千萬不要過于依賴布局管理器,因?yàn)樵谝恍?fù)雜的界面,布局管理器反而稱為負(fù)擔(dān),所以在這里提個(gè)醒。