壓測工具開發實戰篇(二)——構建側邊欄以及設置圖標字體

在這里插入圖片描述

你好,我是安然無虞。

文章目錄

    • 構建側邊欄
      • QtAwesome使用
      • 調整側邊欄寬度
      • 了解: sizePolicy屬性
      • 偽狀態

在這里插入圖片描述

在閱讀本文之前, 有需要的老鐵可以先回顧一下上篇文章:
壓測工具開發(一)——使用Qt Designer構建簡單界面

構建側邊欄

我們要實現類似于下面這樣的側邊欄功能:

在這里插入圖片描述
可以在 Qt Designer 中使用(containers)容器里的Frame容器, 拖到主窗口中即可:
在這里插入圖片描述
要實現側邊欄中每一個功能按鈕可以在Frame容器控件中添加所需數量的button按鈕控件即可.

在這里插入圖片描述
因為界面上需要容納多個子窗口, 所以還需要使用容器里的MDI容器控件, 添加到主界面中:
在這里插入圖片描述
我們將 側邊欄Frame容器設置為垂直布局, 再將包含側邊欄和MDI子窗口的控件設置為水平布局, 界面即可按預期顯示:
在這里插入圖片描述
如果我們想要讓側邊欄的按鈕設置為前面提到的圖標模樣, 該怎么做呢?

可以在 網上搜索 QtAwesome官網

QtAwesome使用

QtAwesome是一個Python庫,用于在PyQt和PySide應用中使用圖標字體.它支持多種圖標系列,如msc、fa5等,允許用戶自定義顏色、樣式、動畫效果.

這個網站上面還有QtAwesome的使用示例, 請試著理解.

關于 QtAwesome 的使用有一個重要的問題就是: 我怎么知道想用的圖標對應的名字呢, 從哪里能看到呢?

如果是 Windows電腦可以在安裝的QtAwesome目錄下找到 qta-browser.exe可執行程序, 雙擊運行即可顯示所有圖標信息.

因為我用的是macOS系統電腦, 所以這里主要講解macOS系統中的操作:
1.確保環境配置正確
確保你已經在 PyCharm 的虛擬環境中正確安裝了 qtawesome 模塊以及相關的依賴項(如PySide6)
如果尚未安裝,可以通過以下命令安裝:

pip install qtawesome pyside6

2.找到 icon_browser.py 文件
在 PyCharm 的虛擬環境中,qtawesome 模塊通常安裝在 site-packages 目錄下.
可以通過以下方式找到 icon_browser.py 文件:
打開 PyCharm 的終端, 輸入以下命令,找到 qtawesome 的安裝路徑:

python -c "import qtawesome; print(qtawesome.__file__)"

這將輸出類似以下路徑:

/path/to/your/virtualenv/lib/python3.x/site-packages/qtawesome/__init__.py

icon_browser.py 文件通常位于 qtawesome 模塊的目錄下,路徑類似于:

/path/to/your/virtualenv/lib/python3.x/site-packages/qtawesome/icon_browser.py

3.運行 icon_browser.py
打開 PyCharm 的終端或命令行工具, 切換到 qtawesome 模塊所在的目錄:

cd /path/to/your/virtualenv/lib/python3.x/site-packages/qtawesome

運行 icon_browser.py 腳本:

python3 icon_browser.py

如果一切配置正確,icon_browser.py 將啟動一個圖形界面,顯示所有可用的圖標及其名稱.

通過運行 icon_browser.py,你可以直觀地查看 qtawesome 模塊中所有可用的圖標,并且可以直接復制圖標名稱用于你的項目中.

運行之后顯示如下:
在這里插入圖片描述
我們可以篩選自己想設置的圖標系列以及名字, 比如想設置用戶方面的圖標, 就可以在搜索框中輸入類似于 user 的文本進行查找即可.
在這里插入圖片描述
好, 現在已經知道了圖標對應的信息, 就可以在我們的PySide6程序中使用了.

我們將側邊欄中的第一個圖標設置為客戶端圖標, 名字叫btn_client, 這個時候可以將其圖標設置為剛剛搜索的fa5.user-circle:

import qtawesome as qta# 設置側邊欄圖標 - qtawesome
self.ui.btn_client.setIcon(qta.icon('fa5.user-circle', color='SteelBlue'))
self.ui.btn_client.setIconSize(QSize(30, 30))

執行之后顯示效果如下:
在這里插入圖片描述
我們想把側邊欄寬度調整的小一些, 該怎么做呢?

調整側邊欄寬度

踩坑了, 這個我搞了半個多小時才找出來, 因為 Frame控件和MDI控件位于同一個水平布局中, 理論上只要調整這個父級水平布局中的 layoutStretch 屬性即可, 主需要輸入兩個數值,分別表示 Frame 和 MDI Area 的寬度比例, 把Frame對應的數值調小一些即可, 像這樣:
在這里插入圖片描述
但是這樣設置了之后, Frame控件并沒有變化.

要解決這個問題可以設置Frame控件的的最小寬度以及MDI控件的水平拉伸策略改為Expanding, 使其自動填充剩余空間.
在這里插入圖片描述
這樣就可以解決問題了. 現在側邊欄的寬度就好看多了:
在這里插入圖片描述

了解: sizePolicy屬性

sizePolicy屬性決定了控件對可用空間的“需求”和“適應方式”.

sizePolicy 的核心作用

當控件被放置在布局(如水平布局、垂直布局)中時,布局管理器會根據以下因素分配空間:

  1. 父窗口/容器的可用空間
  2. 控件自身的 sizeHint(建議大小)
  3. 控件的 minimumSize/maximumSize(最小/最大限制)
  4. sizePolicy(動態調整策略)

sizePolicy 會告訴布局管理器:

  • 控件是否希望被拉伸(例如填滿剩余空間)
  • 控件是否希望保持固定大小
  • 如何與其他控件競爭空間

sizePolicy 的組成部分

sizePolicy 包含兩個維度的策略和一個拉伸因子:

1.水平策略 (HorizontalPolicy): 定義控件在 水平方向 上的大小調整行為.

常見值:

  • Fixed: 固定寬度(嚴格使用 sizeHint)
  • Minimum: 寬度可以擴大,但不可小于 sizeHint
  • Maximum: 寬度可以縮小,但不可大于 sizeHint
  • Preferred: 優先使用 sizeHint,但可擴大或縮小
  • Expanding: 盡可能填滿空間(主動搶占剩余空間)
  • Ignored: 完全忽略 sizeHint(根據布局強制調整)

2.垂直策略 (VerticalPolicy): 定義控件在 垂直方向 上的大小調整行為(與水平策略同理).

3.拉伸因子 (HorizontalStretch/VerticalStretch)
一個整數值(默認為 0),用于 控制控件在布局中的空間分配比例.

常見場景示例

場景 1:讓按鈕填滿水平空間

設置按鈕的 HorizontalPolicy 為 Expanding,它會自動拉伸以填滿布局的剩余寬度.

場景 2:固定輸入框寬度

設置輸入框的 HorizontalPolicy 為 Fixed,寬度由 sizeHint 決定.

場景 3:按比例分配空間

兩個控件的 HorizontalStretch 分別為 1 和 2,則它們的寬度比例為 1:2.

偽狀態

現在想加一個小功能: 希望按鈕在默認情況下沒有邊框, 當鼠標移動到圖標上會顯示邊框, 并且會有背景色.

這個該怎么做呢?

我們點擊 Frame 控件, 選擇 styleSheet 屬性, 設置想要的屬性值即可.

在這里插入圖片描述

這里的屬性值我們這樣設置:

QPushButton {border: none;
}QPushButton:hover {border: 1px solid yellow;background-color: Cornsilk;
}

對上面代碼的解釋:

  • QPushButton { border: none; }:當按鈕處于正常狀態時,不顯示邊框.
  • QPushButton:hover { border: 1px solid yellow; background-color: Cornsilk; }:當鼠標懸停在按鈕上時,按鈕的邊框變為1像素寬的黃色實線,背景顏色變為Cornsilk(一種淺黃色)

設置好之后, 我們再來運行程序看看效果:
在這里插入圖片描述
符合預期, 但是我們發現上面的Frame控件和MDI控件的周邊(左邊、右邊和中間)都有間隙, 我們想去掉其中的間隙該怎么做呢?

由于 Frame控件和MDI控件 位于同一個水平布局中, 所以只需要調整外層的水平布局的Layout 對應的屬性值即可.
在這里插入圖片描述
按照上面設置后, 再運行看看效果:
在這里插入圖片描述
ok, 沒問題, 剛剛的間隙沒有了.

現在還需要對側邊欄的圖標控件添加一個小功能: 當鼠標移動到圖標上時顯示對應的名稱, 比如鼠標移動到 btn_client 圖標上會顯示 客戶端 的字樣.

只需要點擊對應的圖標控件, 然后設置 toolTip 的值即可, 像這樣:
在這里插入圖片描述
現在就實現了前面提到的功能:
在這里插入圖片描述

遇見安然遇見你,不負代碼不負卿。
謝謝老鐵的時間,咱們下篇再見~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/74539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74539.shtml
英文地址,請注明出處:http://en.pswp.cn/web/74539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Axure RP9.0教程: 查詢條件隱藏與顯示(綜合了動態面板狀態切換及展開收縮效果實現)

文章目錄 引言I 原型顯示/隱藏搜索框思路步驟詳細操作II 若依 ruoyi 顯示/隱藏搜索框 & 顯示隱藏列自定義設置顯示隱藏列顯示/隱藏搜索框引言 數據篩選有大量的查詢條件時,可以選擇查詢隱藏效果。 I 原型顯示/隱藏搜索框 綜合了動態面板狀態切換及展開收縮效果實現 思…

解鎖工業通信:Profibus DP到ModbusTCP網關指南!

解鎖工業通信:Profibus DP到ModbusTCP網關指南! 在工業自動化領域,隨著技術的不斷進步和應用場景的日益復雜,不同設備和系統之間的通訊協議兼容性問題成為了工程師們面臨的一大挑戰。尤其是在Profibus DP和Modbus/TCP這兩種廣泛應…

3維格式轉換(二)

基于python的三維模型演化可視化 本項目的主要內容為總結了3種不同的可視化方案( trimesh + matplotlib 庫、 pyvista 庫、 vedo 庫),并通過案例對可視化效果進行展示,最終通過模型動態演化案例給出最佳效果的可視化方案 本期結構圖為 本期博客結構圖 0 環境搭建 項目開…

docker導出image再導入到其它docker中

導出image docker save -o gxc_tenant.tar vue_tenant:1.0 eitc_tenant:1.0 redis:latest docker.io/mysql:8.0 minio/minio導入image docker load -i gxc_tenant.tar

Spring-IOC部分

Spring-IOC部分 1.SpringBean的配置詳解(Bean標簽) (1)scope 默認情況下,單純的Spring環境Bean的作用范圍有兩個:Singleton和Prototype singleton:單例,默認值,Spring…

人工智能爬蟲導致維基共享資源帶寬需求激增 50%

2025 年 4 月 1 日,維基媒體基金會在博文中表示,自 2024 年 1 月以來,維基共享資源下載多媒體的帶寬消耗激增 50%,這一變化趨勢主要由用于 AI 訓練數據集的網絡爬蟲導致。以下是具體分析1: 爬蟲流量特征與數據存儲模式…

2007-2019年各省地方財政交通運輸支出數據

2007-2019年各省地方財政交通運輸支出數據 1、時間:2007-2019年 2、來源:國家統計局、統計年鑒 3、指標:行政區劃代碼、地區、年份、地方財政交通運輸支出 4、范圍:31省 5、指標說明:地方財政交通運輸支出是指地方…

【爬蟲開發】爬蟲開發從0到1全知識教程第14篇:scrapy爬蟲框架,介紹【附代碼文檔】

本教程的知識點為:爬蟲概要 爬蟲基礎 爬蟲概述 知識點: 1. 爬蟲的概念 requests模塊 requests模塊 知識點: 1. requests模塊介紹 1.1 requests模塊的作用: 數據提取概要 數據提取概述 知識點 1. 響應內容的分類 知識點&#xff1a…

【CMake】《CMake構建實戰:項目開發卷》筆記-Chapter8-生成器表達式

第8章 生成器表達式 生成器表達式(generator expression)是由CMake生成器進行解析的表達式,因此,這些表達式只有在CMake的生成階段才被解析為具體的值。 CMake在生成階段,能夠根據具體選用的構建系統生成器生成特定…

Docker安裝、配置Mysql5.7

1.創建必要的目錄 # 創建目錄 mkdir -p ~/docker/software/mysql/{conf,log,data} 2.如果沒有docker-compose.yml文件的話,先創建docker-compose.yml 配置文件一般長這個樣子 version: 3services:mysql:image: mysql:5.7.36container_name: mysqlports:- "…

【C++學習筆記】十三、速通筆記

完整的C編程教程 目錄 開發環境配置C知識體系現代C特性設計模式數據結構CMake項目構建調試技巧進階主題學習資源 1. 開發環境配置 1.1 安裝編譯器 sudo apt-get install g build-essential1.2 安裝構建工具 sudo apt-get install cmake1.3 VS Code配置 安裝C擴展配置調試…

網絡運維學習筆記(DeepSeek優化版)027 OSPF外部路由計算

文章目錄 OSPF外部路由計算1. 實驗拓撲與基礎配置2. 關鍵配置命令2.1 引入靜態路由2.2 查看路由表 3. LSA生成與傳播分析3.1 ASBR角色通告(1類LSA)3.2 外部路由通告(5類LSA)3.3 外部路由引入過程 4. 5類LSA關鍵字段解析5. 外部路由…

【Python使用】嘿馬推薦系統全知識和項目開發教程第2篇:1.4 案例--基于協同過濾的電影推薦,1.5 推薦系統評估【附代碼

教程總體簡介:1.1 推薦系統簡介 學習目標 1 推薦系統概念及產生背景 2 推薦系統的工作原理及作用 3 推薦系統和Web項目的區別 1.3 推薦算法 1 推薦模型構建流程 2 最經典的推薦算法:協同過濾推薦算法(Collaborative Filtering) 3 …

運算放大器(五)電壓比較器

比較器在最常用的簡單集成電路中排名第二,僅次于排名第一的運算放大器。 電壓比較器是一種用來比較輸入信號電壓與參考電壓大小,并將比較結果以高電平或低電平形式輸出的一種信號處理電路,廣泛應用于各種非正弦波的產生和變換電路中&#xf…

Java面試黃金寶典34

1. 主鍵索引底層的實現原理 定義 主鍵索引是數據庫中用于唯一標識表中每一行記錄的索引,常見的底層實現是 B 樹結構。B 樹是一種平衡的多路搜索樹,由內部節點和葉子節點組成。內部節點只存儲索引鍵和指向下一層節點的指針,不存儲實際數據&am…

Educational Codeforces Round 177 (Rated for Div. 2)

Educational Codeforces Round 177 (Rated for Div. 2) A. Cloudberry Jam 思路&#xff1a; 1千克果子能生產2/3千克果醬&#xff0c;生產3千克果醬則需要2千克果醬&#xff0c;所以*2即可 code: void solve() { int x; cin >> x;cout << 2 * x << e…

ARM-外部中斷,ADC模數轉換器

根據您提供的圖片&#xff0c;我們可以看到一個S3C2440微控制器的中斷處理流程圖。這個流程圖展示了從中斷請求源到CPU的整個中斷處理過程。以下是流程圖中各個部分與您提供的寄存器之間的關系&#xff1a; 請求源&#xff08;帶sub寄存器&#xff09;&#xff1a; 這些是具體的…

23種設計模式-行為型模式-迭代器

文章目錄 簡介問題解決代碼設計關鍵點&#xff1a; 總結 簡介 迭代器是一種行為設計模式&#xff0c;讓你能在不暴露集合底層表現形式(列表、棧和樹等)的情況下遍歷集合中所有的元素。 問題 集合是編程中最常使用的數據類型之一。 大部分集合使用簡單列表存儲元素。但有些集…

Python 布爾類型

Python 布爾類型(Boolean) 布爾類型是Python中的基本數據類型之一&#xff0c;用于表示邏輯值。它只有兩個值&#xff1a; True - 表示真False - 表示假 1. 布爾值的基本使用 # 定義布爾變量 is_active True is_admin Falseprint(is_active) # 輸出: True print(is_admi…

人工智能在前端開發中的應用探索

一、人工智能在前端開發中的應用場景 人工智能&#xff08;AI&#xff09;技術的快速發展為前端開發帶來了新的機遇和挑戰。AI在前端開發中的應用主要集中在以下幾個方面&#xff1a;智能代碼生成、自動化測試、個性化推薦、智能交互設計以及性能優化。這些應用場景不僅提高了…