<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      使用PySide6/PyQt6實(shí)現(xiàn)自定義窗口布局,實(shí)現(xiàn)類似FluentWindow效果

      現(xiàn)在在很多項(xiàng)目中,會比較喜歡FluentWindow效果,這種左側(cè)類似于圖標(biāo)菜單或者樹形結(jié)構(gòu)的,右側(cè)是是動態(tài)窗體或者組件的展示方式,一般不是多文檔布局,每次只是打開當(dāng)前的模塊頁面,類似于堆疊頁面卡片,每次展示最頂端的那個(gè)卡片界面。本篇隨筆綜合介紹一下FluentWindow效果界面的各種展示方式,然后分析頁面的內(nèi)容組成方式,針對性的使用PySide6/PyQt6實(shí)現(xiàn)自定義窗口布局的效果。

      1、FluentWindow效果界面介紹

      在我們的WPF開發(fā)框架中,界面布局UI基于lepoco/wpfui(https://github.com/lepoco/wpfui),它的布局也類似于這個(gè)FluentWindow的風(fēng)格,如下所示。

      以及一些微軟的WPF應(yīng)用界面(Fluent 主題 https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/net90),也是類似如此的。

      或者類似 WinUI 3 Gallery(https://github.com/microsoft/WinUI-Gallery)也是類似的主題風(fēng)格。

      image

      以及WPF界面項(xiàng)目 lepoco/wpfui(https://github.com/lepoco/wpfui
      image

       本文主要是針對Python開發(fā)領(lǐng)域,對使用PySide6/PyQt6實(shí)現(xiàn)自定義窗口布局的探討,因此也注意PyQt-Fluent-Widgets (https://github.com/zhiyiYo/PyQt-Fluent-Widgets)這個(gè)界面組件的實(shí)現(xiàn)效果,非常不錯(cuò),因此對它的實(shí)現(xiàn)方式和組合界面的方式進(jìn)行了一定的研究學(xué)習(xí)。

      image

       2、界面布局的分析

      在對這些界面大致了解后,心里希望模擬他們的實(shí)現(xiàn)方式,構(gòu)造一個(gè)類似的自定義窗口布局,其中參考上面組件的作者的圖示進(jìn)行分析下。

      image

      左側(cè)的導(dǎo)航欄部分,分為了上中下三個(gè)部分,其中導(dǎo)航的滾動布局部分,主要就是用來放置一些比較長內(nèi)容,如列表或者樹控件等內(nèi)容的。

      而右側(cè)的內(nèi)容區(qū)域,主要使用QStackWidget的堆疊式組件,類似于卡片集合,每次顯示最頂部的一張。

      為了使得標(biāo)題欄和整個(gè)窗體的樣式一致化,我們需采用無邊框的窗口處理,這個(gè)可以采用 PySideSix-Frameless-Window(zhiyiYo / PyQt-Frameless-Window),或者參考項(xiàng)目yjg30737pyqt-frameless-windowhttps://github.com/yjg30737/pyqt-frameless-window),兩者都可以。

      為了更好的對標(biāo)題欄進(jìn)行擴(kuò)展管理,我參考后者項(xiàng)目進(jìn)行了修改,并增加了對MacOS和Linux的效果支持(yjg30737pyqt-frameless-window 只有Windows實(shí)現(xiàn),沒有MacOS等效果) 。

      自定義按鈕組件:

      界面了無邊框窗口的實(shí)現(xiàn)后,我們來看看左側(cè)導(dǎo)航欄的實(shí)現(xiàn),首先我們需要把左側(cè)拆分為一個(gè)按鈕條,其中自定義按鈕組件,需要符合下面幾個(gè)效果,里面包含:

      • 一個(gè) QLabel 作為背景線條(選中標(biāo)志)

      • 一個(gè)圖標(biāo)(QLabel/QPushButton/QToolButton 等)

      • 選中時(shí):背景色變淺

      • 未選中時(shí):恢復(fù)正常

      • 鼠標(biāo)懸停時(shí):有特殊效果(hover 效果)

      在 PySide6 里,我們可以通過自定義 QWidget 來實(shí)現(xiàn)。其中整個(gè)按鈕組為單選組(像單選按鈕一樣,點(diǎn)擊一個(gè)自動取消其他的選中,或者叫做互斥選擇組) 管理類,從而組合上面所說的自定義按鈕組件。

      image

       有了上面的自定義按鈕組件(MySelectableItem)和 互斥選擇組組件(MySelectableGroup),我們就可以簡單完成了導(dǎo)航按鈕欄目的設(shè)計(jì)了,類似下面的效果,實(shí)現(xiàn)選擇、懸停、移動鼠標(biāo)進(jìn)入的樣式不同變化

      image

       

      內(nèi)容區(qū)組件:

      QStackedWidget 是 Qt 里專門用來管理 多個(gè)頁面/界面 的容器控件,它是Qt框架中的一個(gè)堆棧窗口控件,用于在同一空間內(nèi)堆疊多個(gè)子控件(或稱“頁面”),但一次只顯示其中一個(gè)。它常用于創(chuàng)建多頁面或多視圖的應(yīng)用程序,比如設(shè)置向?qū)А⑦x項(xiàng)卡界面(盡管它本身不帶選項(xiàng)卡標(biāo)簽)和復(fù)雜的表單。 

      image

       

      它的工作方式有點(diǎn)像 卡片堆疊

      • 一次只顯示一個(gè)子界面;

      • 可以通過索引(int)或者 widget 實(shí)例切換顯示的頁面;

      • 常用于多頁面界面切換(比如“設(shè)置/主頁/詳情”之間切換)。

      3、使用PySide6/PyQt6實(shí)現(xiàn)自定義窗口布局的效果

      Window系統(tǒng)的普通的亮色模式下的效果如下所示。

      image

      如果單擊折疊按鈕,可以看到效果。

      image

       

       如果切換到Windows深色模式下,窗體顏色變?yōu)楹谏瑫r(shí)字體顏色對應(yīng)變化為亮色一些

      image

       如果切換到全屏模式下,頂部居中位置有全屏退出提示【按ESC鍵退出】,效果如下

      image

       而MacOS樣式,仿照標(biāo)題欄左側(cè)放置常規(guī)按鈕,懸停的時(shí)候出現(xiàn)按鈕圖標(biāo)效果,如下所示。

      image

       

      posted on 2025-10-19 20:07  伍華聰  閱讀(424)  評論(0)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: 成人精品一区日本无码网| 农村老熟女一区二区三区| 加勒比无码人妻东京热| 中文字幕乱码一区二区免费| 中国大陆高清aⅴ毛片| 亚洲区激情区无码区日韩区 | 老司机午夜精品视频资源| 精品人妻中文字幕有码在线| 国产仑乱无码内谢| 孕妇怀孕高潮潮喷视频孕妇| 久久九九日本韩国精品| 成人免费无码大片A毛片抽搐色欲 成人啪精品视频网站午夜 | 繁昌县| 亚洲熟女一区二区av| 少妇高潮喷水正在播放| 亚洲国产精品久久一线不卡| 国产精品成人午夜久久| 四虎在线播放亚洲成人| 被c到高潮疯狂喷水国产| 亚洲av第三区国产精品| 一本精品中文字幕在线| 高清有码国产一区二区| 一本大道久久香蕉成人网| 亚洲综合中文字幕首页| 久久精品国产99久久美女| 亚洲精品无amm毛片| 亚洲伊人久久综合影院| 国产av一区二区不卡| 久久精品久久黄色片看看| 中文字幕人妻中出制服诱惑| 国产中文三级全黄| 小伙无套内射老熟女精品| 国产视频一区二区三区四区视频| 久久天天躁狠狠躁夜夜avapp| 国产尤物精品自在拍视频首页| 国精品无码一区二区三区在线| 中文字幕丰满伦子无码ab| 国产午夜精品福利视频| 山西省| 久久人人妻人人爽人人爽| 男女扒开双腿猛进入爽爽免费看|