最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于pyqt5控件自適應(yīng)窗口超詳細知識點匯總

 更新時間:2023年03月31日 15:34:32   作者:喵嗚角角  
這篇文章主要介紹了關(guān)于pyqt5控件自適應(yīng)窗口超詳細知識點匯總,有了布局,再在布局中放置各種控件,我們就能讓控件實現(xiàn)自適應(yīng)的效果,需要的朋友可以參考下

本文涉及:Windows操作系統(tǒng),Python,PyQt5,Qt Designer,PyCharm

一、自適應(yīng)原理 

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

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

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

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

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

二、基礎(chǔ)布局示例

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

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

        那我們?nèi)绾巫屵@個frame控件自適應(yīng)窗口呢?其實很簡單,因為我們的目的是讓這個frame去自適應(yīng)窗口,那么我們就將整個窗口作為一個布局容器就行了。

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

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

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

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

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

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

        如下圖所示:

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

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

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

        至此,我們的基礎(chǔ)示例就完成了。 

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

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

        比如現(xiàn)在非常大眾化的左側(cè)菜單,右側(cè)工作區(qū)的布局模式,如下圖所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

         預(yù)覽一下我們發(fā)現(xiàn),窗口最大化之后底部的2個菜單欄和工作區(qū)的大小是正常變化的,但是這3個frame卻是紋絲不動。

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

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

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

        那么現(xiàn)在有2種解決辦法:

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

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

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

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

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

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

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

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

四、其它特殊控件自適應(yīng)補充

1. tableWidget

        這個是表格控件,我之前在使用時,發(fā)現(xiàn)它在設(shè)置布局之后,控件的大小雖然是跟隨窗口大小改變的,但是表格里的數(shù)據(jù)卻不是自適應(yīng)控件體的,這個需要在業(yè)務(wù)邏輯代碼中加一句如下代碼:

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

到此這篇關(guān)于關(guān)于pyqt5控件自適應(yīng)窗口超詳細知識點匯總的文章就介紹到這了,更多相關(guān)pyqt5控件自適應(yīng)窗口知識點內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python執(zhí)行遺傳編程gplearn庫使用實例探究

    Python執(zhí)行遺傳編程gplearn庫使用實例探究

    這篇文章主要為大家介紹了Python執(zhí)行遺傳編程gplearn庫使用實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python?Flask?模型介紹和配置方法

    Python?Flask?模型介紹和配置方法

    flask是基于MTV的結(jié)構(gòu),其中M指的就是模型,即數(shù)據(jù)模型,在項目中對應(yīng)的是數(shù)據(jù)庫,下面紀錄以mysql和orm方式連接數(shù)據(jù)庫的方法,對Python?Flask?模型介紹和配置方法感興趣的朋友跟隨小編一起看看吧
    2022-12-12
  • 用Python實現(xiàn)石頭剪刀布游戲

    用Python實現(xiàn)石頭剪刀布游戲

    大家好,本篇文章主要講的是用Python實現(xiàn)石頭剪刀布游戲,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • pytorch.range()和pytorch.arange()的區(qū)別及說明

    pytorch.range()和pytorch.arange()的區(qū)別及說明

    這篇文章主要介紹了pytorch.range()和pytorch.arange()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • OpenCV讀取與寫入圖片的實現(xiàn)

    OpenCV讀取與寫入圖片的實現(xiàn)

    這篇文章主要介紹了OpenCV讀取與寫入圖片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • python保存兩位小數(shù)的多種方法匯總

    python保存兩位小數(shù)的多種方法匯總

    很多小伙伴在學(xué)習(xí)python的時候可能會遇到對數(shù)據(jù)進行格式化輸出的需求,其中最常見的需求為:保留幾位小數(shù),下面這篇文章主要給大家介紹了關(guān)于python保存兩位小數(shù)的多種方法,需要的朋友可以參考下
    2021-12-12
  • Python TensorFlow介紹與實戰(zhàn)

    Python TensorFlow介紹與實戰(zhàn)

    這篇文章介紹了Python TensorFlow介紹與實戰(zhàn),通過本文的介紹,我們不僅了解了TensorFlow的基本概念和安裝方法,還通過線性回歸和卷積神經(jīng)網(wǎng)絡(luò)的實例,深入探討了 TensorFlow 的使用技巧,TensorFlow 的強大功能和靈活性使其成為深度學(xué)習(xí)領(lǐng)域的重要工具,需要的朋友可以參考下
    2024-07-07
  • 利用python在Word文檔中創(chuàng)建和執(zhí)行條件郵件合并

    利用python在Word文檔中創(chuàng)建和執(zhí)行條件郵件合并

    郵件合并域和IF域是Word文檔中兩種非常實用的域,前者可以用來進行郵件合并,根據(jù)數(shù)據(jù)批量創(chuàng)建定制的Word文檔,本文講介紹如何使用Python在Word文檔中創(chuàng)建條件郵件合并域以及執(zhí)行條件郵件合并,需要的朋友可以參考下
    2024-08-08
  • Python常用標(biāo)準(zhǔn)庫之os模塊功能

    Python常用標(biāo)準(zhǔn)庫之os模塊功能

    這篇文章主要介紹了Python常用標(biāo)準(zhǔn)庫之os模塊功能,os模塊的主要功能有系統(tǒng)相關(guān)、目錄及文件操作、執(zhí)行命令和管理進程,其中的進程管理功能主要是Linux相關(guān)的,此處不做討論,對Python標(biāo)準(zhǔn)庫os相關(guān)知識感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • python中with的具體用法

    python中with的具體用法

    本文主要介紹了python中with的基本使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論

赤壁市| 紫金县| 临海市| 邢台市| 永新县| 临西县| 禄劝| 弥渡县| 甘谷县| 扬州市| 柏乡县| 辽中县| 武威市| 平凉市| 玉门市| 福鼎市| 临桂县| 鹰潭市| 察雅县| 临沭县| 南皮县| 边坝县| 三台县| 凤庆县| 洪湖市| 高阳县| 孟州市| 延津县| 元氏县| 胶南市| 怀远县| 乐平市| 镇赉县| 温泉县| 信丰县| 枣阳市| 远安县| 融水| 宁海县| 新巴尔虎右旗| 砀山县|