PySide6 UI 靈活性:QToolBar 的浮動與停靠及 QSplitter 的可調整面板

PySide6 UI 靈活性:QToolBar 的浮動與停靠及 QSplitter 的可調整面板

在現代桌面應用程序開發中,提供靈活且用戶友好的界面至關重要。PySide6(Qt for Python)提供了強大的工具來構建這樣的界面。本文將深入探討兩個關鍵的 PySide6 控件:QToolBarQSplitter,它們如何幫助開發者創建高度可定制和響應式的用戶界面。

1. QToolBar:可浮動與停靠的工具欄

QToolBar 是 PySide6 中一個非常實用的控件,它允許開發者創建包含常用操作按鈕、文本標簽、下拉菜單等元素的工具欄。QToolBar 最強大的特性之一是其固有的浮動 (Floating)停靠 (Docking) 能力。

核心特性:

  • 停靠 (Docking)QToolBar 可以被用戶拖動并“停靠”到 QMainWindow 的任何可用邊緣,通常是頂部、底部、左側或右側。這使得用戶可以根據自己的工作習慣和屏幕空間優化工具欄的位置。
  • 浮動 (Floating):當用戶將 QToolBar 從其停靠位置拖離時,它會變成一個獨立的、可自由移動的浮動窗口。這對于需要將工具欄放置在特定位置以便快速訪問,同時又不希望它占用主窗口固定空間的場景非常有用。

實現方式:

QMainWindow 中添加 QToolBar 非常簡單,只需創建 QToolBar 實例,然后使用 QMainWindowaddToolBar() 方法將其添加到主窗口即可。

from PySide6.QtWidgets import QMainWindow, QToolBar, QApplication, QLabel
from PySide6.QtGui import QAction
from PySide6.QtCore import Qt
import sys # 導入sys模塊class MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QToolBar 示例")self.resize(800, 600) # 增加窗口大小# 設置一個中心部件,這是QMainWindow顯示內容所必需的central_widget = QLabel("這是主窗口的中心內容")central_widget.setAlignment(Qt.AlignCenter) # 使文本居中self.setCentralWidget(central_widget)# 創建工具欄toolbar = QToolBar("我的工具欄")self.addToolBar(toolbar) # 將工具欄添加到主窗口# 添加一些動作到工具欄action1 = QAction("動作一", self)action2 = QAction("動作二", self)toolbar.addAction(action1)toolbar.addAction(action2)if __name__ == "__main__":app = QApplication(sys.argv) # 推薦使用sys.argvwindow = MyMainWindow()window.show()sys.exit(app.exec()) # 確保應用程序正確退出

通過上述代碼,用戶就可以在運行時拖動 toolbar,將其停靠到窗口的四個邊緣,或者使其浮動。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

優勢:

  • 用戶定制性:用戶可以根據個人喜好和工作流自由安排工具欄。
  • 空間優化:在小屏幕或需要最大化內容顯示區域時,用戶可以將不常用的工具欄浮動或隱藏。
  • 增強可用性:將常用功能集中在易于訪問的位置,提高操作效率。

2. QSplitter:可調整大小的面板

QSplitter 是一個布局控件,它允許用戶通過拖動分隔條來動態調整其內部子控件的大小。這對于創建具有可變區域的應用程序界面非常有用,例如文件瀏覽器(左側目錄樹,右側文件列表)或代碼編輯器(左側文件導航,右側代碼編輯區)。

核心特性:

  • 水平/垂直分割QSplitter 可以水平或垂直地分割其包含的區域。
  • 用戶可調整大小:用戶可以通過拖動分隔條來改變子控件的相對大小。
  • 初始大小設置:可以為每個子控件設置初始大小,確保應用程序啟動時有一個合理的布局。

實現方式:

使用 QSplitter 的基本步驟是創建 QSplitter 實例,然后使用 addWidget() 方法將需要分割的控件添加到其中。

from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QSplitter, QApplication
from PySide6.QtCore import Qtclass MyMainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("QSplitter 示例")self.setMinimumSize(600, 400)central_widget = QWidget()self.setCentralWidget(central_widget)main_layout = QHBoxLayout(central_widget)# 創建 QSplittersplitter = QSplitter(Qt.Horizontal) # 水平分割# 創建左側面板left_panel = QWidget()left_layout = QVBoxLayout(left_panel)left_layout.addWidget(QLabel("這是左側面板"))left_panel.setStyleSheet("background-color: lightblue;")# 創建右側面板right_panel = QWidget()right_layout = QVBoxLayout(right_panel)right_layout.addWidget(QLabel("這是右側面板"))right_panel.setStyleSheet("background-color: lightgreen;")# 將面板添加到 splittersplitter.addWidget(left_panel)splitter.addWidget(right_panel)# 設置初始大小比例(可選)# 例如,左側200像素,右側自動填充剩余空間splitter.setSizes([200, self.width() - 200]) main_layout.addWidget(splitter)if __name__ == "__main__":app = QApplication([])window = MyMainWindow()window.show()app.exec()

在上述代碼中,left_panelright_panelsplitter 分割,用戶可以通過拖動它們之間的分隔條來調整它們的寬度。
在這里插入圖片描述
在這里插入圖片描述

優勢:

  • 靈活的布局:用戶可以根據自己的需求調整不同區域的大小,以更好地查看內容。
  • 響應式設計:應用程序可以更好地適應不同屏幕尺寸和分辨率。
  • 提升用戶體驗:為用戶提供更多的控制權,使界面更具交互性。

結論

QToolBarQSplitter 是 PySide6 中構建靈活和用戶友好界面的強大基石。QToolBar 提供了可浮動和停靠的工具集,讓用戶能夠自由組織常用功能;而 QSplitter 則允許用戶動態調整界面中各個區域的大小,從而優化內容顯示。通過巧妙地結合使用這些控件,開發者可以創建出既美觀又高效的桌面應用程序,顯著提升用戶體驗。

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

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

相關文章

B4016 樹的直徑

B4016 樹的直徑 - 洛谷 題目描述 給定一棵 n 個結點的樹,樹沒有邊權。請求出樹的直徑是多少,即樹上最長的不重復經過一個點的路徑長度是多少。 輸入格式 第一行輸入一個正整數 n,表示結點個數。 第二行開始,往下一共 n - 1 行…

【一維 前綴和+差分】

一、一維前綴和 1.1 定義 給定一個數組 a[1..n],其前綴和數組 pre[1..n] 定義為: pre[i]a[1]a[2]?a[i] pre[i] a[1] a[2] \dots a[i] pre[i]a[1]a[2]?a[i] 即 pre[i] 表示原數組從第 1 項到第 i 項的和。 1.2 構建 int a[N], pre[N]; for (int i …

Spring Boot 雙數據源配置

文章目錄什么是雙數據源?為什么需要雙數據源?核心實現原理完整示例注意什么是雙數據源? 雙數據源是指在一個應用程序中同時配置和使用兩個不同的數據庫連接。比如: 一個連接訂單數據庫,處理業務數據一個連接用戶中心…

【Java】【力扣】102.二叉樹層序遍歷

思路一個輔助隊列&#xff08;初始化隊列&#xff1a;根節點入隊&#xff09;一個節點 出隊&#xff0c;他的左右孩子入隊循環 直到隊列為空舉例代碼public List<List<Integer>> levelOrder(TreeNode root) {if (rootnull){return new ArrayList<List<Intege…

為什么有些PDF無法復制文字?原理分析與解決方案

在日常辦公和學習中&#xff0c;我們經常會從PDF文件中復制文字&#xff0c;用于編輯、引用、整理筆記。但你是否也遇到過這樣的情況&#xff1a;有些PDF中的文字根本無法選中&#xff0c;更無法復制粘貼&#xff1f; 看起來像是“文字”&#xff0c;但操作上卻完全無效——這…

LabVIEW瀏覽器ActiveX事件交互

?程序圍繞 WebBrowser ActiveX 控件&#xff0c;借 “Reg Event Callback” 注冊標題變更回調&#xff0c;“Callback - Title Change.vi” 處理標題數據&#xff0c;“Monitor...” 響應 URL 變更&#xff0c;“Unregister...” 清理資源&#xff0c;實現瀏覽器事件交互與管控…

C++后端面試八股文

一、C 語言基礎與底層原理請解釋 new / delete 和 malloc / free 的區別和聯系&#xff0c;以及使用它們時需要注意什么new 和 delete 是C的??運算符&#xff08;Operator&#xff09;??。這意味著它們可以被類&#xff08;通過 operator new 和 operator delete&#xff0…

基礎分類模型及回歸簡介(一)

一、先搞懂兩個核心任務&#xff1a;分類和回歸咱們生活中總遇到要 “判斷” 或 “預測” 的事&#xff1a;比如看到一個水果&#xff0c;判斷是蘋果還是橘子 —— 這就是分類&#xff08;結果是 “類別”&#xff09;&#xff1b;比如根據西瓜的大小、顏色&#xff0c;猜它能賣…

【LeetCode 熱題 100】114. 二叉樹展開為鏈表——(解法二)分治

Problem: 114. 二叉樹展開為鏈表 給你二叉樹的根結點 root &#xff0c;請你將它展開為一個單鏈表&#xff1a; 展開后的單鏈表應該同樣使用 TreeNode &#xff0c;其中 right 子指針指向鏈表中下一個結點&#xff0c;而左子指針始終為 null 。 展開后的單鏈表應該與二叉樹 先序…

【WPF】WPF 自定義控件 實戰詳解,含命令實現

&#x1f9e9;《WPF 自定義控件》實戰詳解本文將圍繞如何編寫一個自定義控件&#xff08;如帶右鍵菜單的圖片控件 ImageView&#xff09;&#xff0c;逐步講解其定義、命令綁定與 ContextMenu 中常見的語法技巧。&#x1f9f1; 一、創建一個 WPF 自定義控件的步驟 WPF 中自定義…

Flink 2.0 DataStream算子全景

在實時流處理中&#xff0c;Apache Flink的DataStream API算子是構建流處理 pipeline 的基礎單元。本文基于Flink 2.0&#xff0c;聚焦算子的核心概念、分類及高級特性。 一、算子核心概念&#xff1a;流處理的"原子操作 1. 數據流拓撲&#xff08;Stream Topology&#x…

Flask 入門到實戰(2):使用 SQLAlchemy 打造可持久化的數據層

Flask 入門到實戰&#xff1a;使用 SQLAlchemy 打造可持久化的數據層一、前言&#xff1a;為什么用 Flask-SQLAlchemy&#xff1f; 在 Python Web 開發中&#xff0c;操作數據庫的方式主要有兩種&#xff1a; 直接寫 SQL&#xff08;繁瑣且難維護&#xff09;使用 ORM&#xff…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | GithubProfies(GitHub 個人資料)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— GithubProfies組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 Composition API&#xff08;<script setup…

simscape中坐標系和坐標變換Frames and Transforms

為了更便捷地描述單個物體的運動&#xff0c;最好以該物體的質心為坐標原點建立坐標系&#xff0c;從而可以非常方便地描述其旋轉運動。因此&#xff0c;在計算多個物體之間的位置關系時&#xff0c;為了計算方便&#xff0c;需要頻繁地更換坐標框架&#xff0c;這也是multibod…

構建分布式光伏“四可”能力:支撐新型電力系統安全穩定運行的關鍵路徑

隨著我國新能源裝機規模的跨越式增長&#xff0c;國家能源戰略對新能源電站的規范化接入與精細化調度管理提出了更高要求。在電力市場化改革深化與新型電力系統構建的關鍵時期&#xff0c;保障電網安全穩定、提升新能源高效消納能力已成為核心議題。國家能源局于2025年1月17日正…

UART寄存器介紹

在 STM32 微控制器中&#xff0c;UART&#xff08;通用異步收發傳輸器&#xff09;通信通過多個寄存器實現配置和數據傳輸。下面詳細解析 UART 的核心寄存器及其功能。1. 狀態寄存器&#xff08;USART_SR&#xff09;狀態寄存器反映 UART 當前的工作狀態&#xff0c;用于判斷數…

寫一個算法對一組值進行歸一化映射,使它們在視覺上有明顯的區分度,尤其在數據集分布不均時仍能體現差異

問題&#xff1a; 有一批數據&#xff0c;都是隨機值范圍是不確定&#xff0c;我需要用這個值來繪制同樣數量圓&#xff0c;不同值他們的圓半徑不同&#xff0c;考慮到數據有時候大小偏差不大&#xff0c;這1000個值有可能是集中在10,20之間&#xff0c;也可能是分布廣泛&#…

具身智能零碎知識點(五):VAE中對使用KL散度的理解

VAE中對使用KL散度的理解什么是 VAE (Variational AutoEncoder)&#xff1f;從自編碼器 (AE) 說起VAE&#xff1a;讓潛在空間變得“有意義”和“連續”KL 散度是如何用到的&#xff1f;通俗理解 KL 散度在 VAE 中的作用&#xff1a;帶來的好處&#xff1a;KL 散度公式 (無需背誦…

理解:進程、線程、協程

線程、進程和協程是并發編程的重要組成部分。進程&#xff08;Process&#xff09;定義進程是操作系統分配資源的基本單位&#xff0c;表示一個正在執行的程序。一旦一個程序被加載到內存中&#xff0c;它就成為一個進程&#xff0c;而每個進程都有其獨立的內存空間。特征進程之…

總結一下找素數的三種方法

目錄 一試除法 二埃氏篩 三線性篩(歐拉篩) 一試除法 思想&#xff1a;就是判斷某個數x是不是素數,就判斷從2開始到小于根號x的范圍內有沒有能夠取余不等于0的,這個說明當前值就是x的一個因子&#xff0c;所以不是素數。 代碼&#xff1a; import java.util.Scanner;public…