天天看點

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

目錄

1、布局管理器進行布局

2、容器控件進行布局

3、geometry屬性:控件絕對布局

4、sizePolicy屬性:微調優化控件布局

Qt Designer提供4種視窗布局方式,分别如下:

Vertical Layout(垂直布局),控件預設按照從上到下的順序進行縱向添加;

Horizontal Layout(水準布局),控件預設按照從左到右的順序進行橫向添加;

Grid Layout(栅格布局),将視窗控件放入一個網格之中,然後将它們合理地劃分成若幹行(row)和列(column),并把其中的每個視窗控件放置在合适的單元(cell)中,這裡的單元即是指由行和列交叉所劃分出來的空間;

Form Layout(表單布局),控件以兩列的形式布局在表單中,其中左列包含标簽,右列包含輸入控件。

它們位于Qt Designer主視窗左側區域的Widget Box(工具箱)裡的Layouts(布局)欄中,如下圖所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

通常進行布局有兩種方式:一種是通過布局管理器進行布局,另一種是通過容器控件進行布局。

以垂直布局為例,打開Qt Designer,建立一個QWidget控件,然後在其中放入兩個按鈕(PushButton)子控件。

選中這兩個控件,單擊滑鼠右鍵,在彈出的快捷菜單中選擇"布局"的子菜單就可以指定該控件的布局方式了,此處選擇“垂直布局”,如下圖所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

所謂容器控件,就是指能夠容納子控件的控件。使用容器控件,目的是将容器控件中的控件歸為一類,以有别于其他控件。當然,容器控件也可以對其子控件進行布局,隻不過沒有布局管理器常用。使用容器控件最大的作用是:美觀和友善管理,例如将10個按鈕(PushButton)子控件放在同一個容器控件中,拖動容器控件即可同時移動10個按鈕(PushButton)子控件。

Qt Designer主視窗左側區域的Widget Box(工具箱)裡的Containers(容器)欄中,如下圖所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

具體使用可參見官網說明,這裡不再贅述:Using Containers in Qt Designer | Qt Designer Manual

從左側容器(Containers)導航欄拖入一個Frame控件,Frame控件放置一些常用的表單、按鈕等控件,在Frame控件中放入三個Button控件,并對其進行重命名,還是以垂直布局,如下圖所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

此時拖動Frame控件即可便捷控制三個Button控件,并且在右側對象檢視器中可見,三個Button控件對象是在Frame控件子級,當建立的對象較多時就非常友善管理了。

最後再聊聊絕對布局。

絕對布局方法非常簡單,在Qt Designer主視窗右側區域屬性欄目設定相關控件的geometry屬性即可。geometry屬性在PyQt中主要用來設定控件在視窗中的絕對坐标與控件自身的大小。例如,以下Button控件的geometry屬性,如下圖所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

參數說明如下所示:

X:110,按鈕控件左上角,距離主視窗左側為110px;

Y:170,按鈕控件左上角,距離主視窗上側為170px;

寬度:93,按鈕控件寬度為93px;

高度:28,按鈕控件高度為28px。

示意圖如下所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

可以随意更改這些屬性值來檢視控件在視窗中的位置變化,也可以通過更改控件在視窗中的位置及其大小來檢視屬性值的變化,以此更深刻地了解屬性的含義。

sizePolicy屬性的作用是:若視窗控件在布局管理器中的布局不能滿足我們的需求,那麼就可以設定該視窗控件的sizePolicy屬性來實作布局的微調。

介紹sizePolicy屬性之前,需要先講講sizeHint和minisizeHint屬性。每個視窗控件都有屬于自己的兩個尺寸:一個是sizeHint屬性(尺寸提示),它是視窗控件的期望尺寸;另一個是minimumSize屬性(最小尺寸),它是視窗控件壓縮時所能夠被壓縮到的最小尺寸。

sizePolicy屬性也是每個視窗控件所特有的屬性,不同的視窗控件的sizePolicy可能不同。例如,以下Button控件的預設sizePolicy屬性,如下圖所示:

Python Qt GUI設計:視窗布局管理方法【基礎】(基礎篇—5)

水準政策和垂直政策的參數解釋如下所示:

Fixed:視窗控件具有其sizeHint所提示的尺寸且尺寸不會再改變;

Minimum:視窗控件的sizeHint所提示的尺寸就是它的最小尺寸;該視窗控件不能被壓縮得比這個值小,但可以變得更大;

Maximum:視窗控件的sizeHint所提示的尺寸就是它的最大尺寸;該視窗控件不能變得比這個值大,但它可以被壓縮到minisizeHint給定的尺寸大小;

Preferred:視窗控件的sizeHint所提示的尺寸就是它的期望尺寸;該視窗控件可以縮小到minisizeHint所提示的尺寸,也可以變得比sizeHint所提示的尺寸還要大;

Expanding :視窗控件可以縮小到minisizeHint所提示的尺寸,也可以變得比sizeHint所提示的尺寸大,但它希望能夠變得更大;

MinimumExpanding:視窗控件的sizeHint所提示的尺寸就是它的最小尺寸;該視窗控件不能被壓縮得比這個值還小,但它希望能夠變得更大;

lgnored:無視視窗控件的sizeHint和minisizeHint所提示的尺寸,按照預設來設定。

學了本篇文章,各位朋友基本可實作布局操作,也可繼續學習強化篇文章,繼續加深了解~

Python Qt GUI設計:視窗布局管理方法【強化篇】(基礎篇—6)