亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

pyqt5控件自適應窗口怎么應用

發布時間:2023-03-31 16:17:08 來源:億速云 閱讀:205 作者:iii 欄目:開發技術

今天小編給大家分享一下pyqt5控件自適應窗口怎么應用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

一、自適應原理 

        自適應其實很簡單,只要搞懂原理,你就能隨心所欲地去布置你的頁面了。

        它的基礎是布局,有了布局,再在布局中放置各種控件,我們就能讓控件實現自適應的效果,即:不管是點擊最大化按鈕之前還是之后,控件的大小比例都能跟隨窗口大小的變化而變化。

        先了解一下布局,主要有以下3種:

水平布局(H)里面的控件會水平排布,即從左到右放置
垂直布局(V)里面的控件會垂直排布,即從上到下放置
柵格布局(G)控件呈網格排布,上下左右都可以放置

        還有其它布局,但是用的不多,本文暫且不提。

二、基礎布局示例

         打開Qt Designer,新建一個窗口,拖進一個frame控件,然后通過布局來讓其自適應窗口。如下圖所示:

pyqt5控件自適應窗口怎么應用

         從右側的對象查看器中我們可以看到,有2個圖標的右下角是打了紅色的禁止符號,這就代表當前對象是沒有使用布局的。前面我們說到,如果控件沒有在布局中,那么它就不能自適應窗口。

        那我們如何讓這個frame控件自適應窗口呢?其實很簡單,因為我們的目的是讓這個frame去自適應窗口,那么我們就將整個窗口作為一個布局容器就行了。

        具體做法就是,將鼠標點擊窗口中沒有控件的空白處,再點擊右鍵,設置水平布局就可以了。注意:不是灰色區域!步驟如下圖所示:

pyqt5控件自適應窗口怎么應用

         設置完成后,你就會發現,frame的大小直接和窗口大小一致了。再觀察右側對象查看器中,frame對象上面的centralwidget的布局圖標是正常顯示了,剛剛的紅色禁止標志已經消失了。如下圖所示:

pyqt5控件自適應窗口怎么應用

         是不是這樣就結束了?理論上是的,但是還不夠完美。如果你仔細觀察就會發現,frame的邊緣和窗口的藍色邊緣并不是完全貼合的,這就會導致邊緣會有一定的空隙,也是比較影響美觀的。

        因為在Qt Designer中,布局里是會默認留出空隙的,需要我們自己手動調整一下,調整步驟如下:

        第1步,我們鼠標單擊對象查看器中的centralwidget,再單擊屬性編輯器(或者按組合鍵:Ctrl + I,字母i,不是1),對centralwidget進行具體的設置。

        第2步,將centralwidget的屬性欄滑到最底部,我們會看到有個名叫Layout的屬性,然后將里面的數值全部改成0即可。

        如下圖所示:

pyqt5控件自適應窗口怎么應用

         屬性含義我給大家翻譯一下,對照上圖了解一下即可,不需要死記硬背:

layoutName(布局名稱)horizontalLayout(水平布局)
layoutLeftMargin(布局左邊距)9
layoutTopMargin(布局上邊距)9
layoutRightMargin(布局右邊距)9
layoutBottomMargin(布局底邊距)9
layoutSpacing(布局間距)6
layoutStretch(布局拉伸)0
layoutSizeConstraint(布局尺寸約束)SetDefaultConstraint(設置默認約束)

        在Qt Designer中,按組合鍵:Ctrl + R預覽設計,再點擊右上角的最大化按鈕測試一下,frame也完美和窗口大小保持一致了。如果不方便觀察,可以先將frame的背景色設置成任意彩色就能很清楚地去觀察了。

        至此,我們的基礎示例就完成了。 

三、高級布局示例:布局嵌套布局

        上面的基礎示例中只添加了1個布局,但是只要我們的程序稍微復雜一些,都會用到很多控件,每個控件在窗口中的位置也不同。

        比如現在非常大眾化的左側菜單,右側工作區的布局模式,如下圖所示:

pyqt5控件自適應窗口怎么應用

         這種布局模式很經典,也很直觀。我們從Qt的角度去看這張圖,左側黑色是一個treeWidget,右側是一個stackedWidget,然后stackedWidget里面還有很多控件。

        那么以此為例,因為treeWidget和stackedWidget是左右放置的,那么我們就可以用水平布局來設置。

        根據上面的基礎示例,我們分別拖拽1個treeWidget和1個stackedWidget進來,然后單擊窗口空白處,鼠標右鍵設置水平布局,最后把Layout屬性下的數值全部設置為0,結果如下圖所示:(為了便于大家觀察,我把stackedWidget的背景設置成淺灰色)

pyqt5控件自適應窗口怎么應用

        從圖中我們看到,菜單欄和工作區在窗口中對半展示了,這個結果并不是我們想要的。所以我們還需要設置一下這2個控件的顯示比例,設置方法同上:我們還是單擊centralwidget,然后找到Layout屬性下的layoutStretch(布局拉伸),默認是“0,0”,現在我們將其設置為“1,3”。

pyqt5控件自適應窗口怎么應用

          這里的布局拉伸,你可以理解為拉伸比例,00就是對半展示,13就是1比3展示。修改數值后,我們驚喜地發現界面變成了下面這樣:

pyqt5控件自適應窗口怎么應用

        展示的比例是基本符合我們的要求了,但是按組合鍵Ctrl + R預覽,再點擊最大化按鈕后發現,界面變成了下面這樣:

pyqt5控件自適應窗口怎么應用

        還是不對勁,最大化之后雖然菜單欄和工作區的比例還是1比3,但是這個比例對于菜單來講還是太寬了,顯得菜單上的字很密很小。當然,菜單上的字體大小和間距我們也是可以調整的,但是1比3的比例對于菜單欄上最長只有4個字的項來說,還是太寬了。

        所以我們的目的就很明顯了,就是要將菜單欄的寬度再縮小一些。寬度縮小,這就涉及到具體數值的修改了,而剛剛的比例修改只能是整數,不能精確到小數點后幾位。

        那么具體怎么做呢?方法如下:

         因為我們只是對菜單欄修改,所以在對象查看器中,我們鼠標單擊選中treeWidget,按組合鍵Ctrl + I或者單擊底部的屬性編輯器進入treeWidget的具體屬性界面,找到一項名為maximumSize(最大尺寸)下的寬度后面的16777215修改成180。如下圖所示:

pyqt5控件自適應窗口怎么應用

         修改好菜單欄的最大寬度之后,我們再預覽一下,發現菜單欄的寬度被固定了,只有垂直高度是隨窗口大小的變化而變化的。這樣的結果就基本符合我們的預期了。

        看到這里,可能有小伙伴會問:哎,不對呀角角,你這第三個標題上不是寫著布局嵌套布局嗎?怎么只是比基礎示例多了個控件而已?

        別急哈~ 我下面要講的才是重點哦~

        通過剛剛的例子,相信大家對水平布局已經很熟悉了。現在呢,咱們可以思考一下:是否可以將某一個布局作為控件再放到窗口的水平布局中去呢?答案是肯定的。

        我們可以看到,上面我放的一張網圖中,工作區中是有很多大大小小的控件在其中的。所以我們在工作區即stackedWidget中,還要再加布局才行。

        我們再拖拽3個frame到stackedWidget中,然后按Ctrl鍵不放依次選中3個frame并設為水平布局,如下圖所示:

pyqt5控件自適應窗口怎么應用

         預覽一下我們發現,窗口最大化之后底部的2個菜單欄和工作區的大小是正常變化的,但是這3個frame卻是紋絲不動。

        動腦筋想想,是不是哪里少了一步?

        噢!對了,之前在設置底部2個控件的時候是不是在窗口的空白處又設置了一下水平布局?那我們依樣畫葫蘆再在stackedWidget的空白處鼠標右鍵加一個水平布局,發現結果變成下面這樣……

pyqt5控件自適應窗口怎么應用

         這肯定不是我們想要的,那是不是因為控件太少了,所以這3個frame才把stackedWidget里面全占滿了呢?并不是,如果我們再拖拽控件進去,依然是這樣排布,因為這3個frame外面最鄰近的布局是水平布局,只要在水平布局里面,放再多控件也還是從左到右排布的。

        那么現在有2種解決辦法:

        第1種,是選中frame外的水平布局右鍵修改成柵格布局,這樣上下左右就都能放控件了,也能正常隨著窗口大小自適應了,這個也算是布局嵌套布局了,但是只嵌套了一層而已。

        第2種,是打破布局,即刪除當前窗口中所有的布局,然后再重新布局。操作方法:鼠標單擊窗口空白處,點擊鼠標右鍵,單擊布局,找到打破布局再點擊即可。如下圖所示:

pyqt5控件自適應窗口怎么應用

         這樣,所有的布局就會被一鍵全部刪除,控件也會被隨機擺放在窗口中,大小也有所變化。但是別慌,打破布局之后,我們先觀察一下下面這張網圖:

pyqt5控件自適應窗口怎么應用

         區域①是一個菜單,這是單獨的1個treeWidget控件,由于它的高度是和窗口的寬度是相等的,所以我們是不是就可以將區域②③④看做一個整體和區域①做一個水平布局?

        然后再觀察②③④,這3個是不是上下排布的?所以我們把這3個設置成垂直布局。再然后,我們看到區域③里面是不是又有3個frame是水平排布,那再把這3個設置到一個水平布局中。

        因為左邊只有1個菜單,右邊的控件是很多的,所以我們先把右邊的控件從上到下依次設置進布局中,然后選中②③④的布局,再右鍵給外面套一個垂直布局。

        最后我們選中菜單欄,然后再選中工作區最外面的垂直布局,再右鍵套一個水平布局,這樣就大功告成啦!

        需要注意的是:如果窗口中需要多層布局時,一定要按照從里到外、從小到大的順序設置布局。

四、其它特殊控件自適應補充

tableWidget

        這個是表格控件,我之前在使用時,發現它在設置布局之后,控件的大小雖然是跟隨窗口大小改變的,但是表格里的數據卻不是自適應控件體的,這個需要在業務邏輯代碼中加一句如下代碼:

self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive | QHeaderView.Stretch)

以上就是“pyqt5控件自適應窗口怎么應用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

庐江县| 枝江市| 石台县| 伊宁市| 明光市| 平江县| 宜章县| 麻城市| 仙桃市| 额尔古纳市| 边坝县| 常宁市| 内丘县| 甘德县| 吉林市| 深水埗区| 紫金县| 万荣县| 蓬安县| 泰兴市| 宜川县| 邢台县| 淮滨县| 安顺市| 桓台县| 钟山县| 淳化县| 和田县| 河北省| 大厂| 兴安盟| 建湖县| 上虞市| 沾化县| 桐庐县| 磐安县| 吴桥县| 巴塘县| 中山市| 嵊泗县| 普兰县|