Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)

目录

1、QTabWidget容器控件类


2、QStackedWidget容器控件类


3、QDockWidget容器控件类


有时候我们可能会面临这样一种情况:所开发的程序包含了太多的控件,导致一个窗口装载不下或者装载的控件太多而不美观。


本篇博文就来解决这个问题,即如何在现有的窗口空间中装载更多的控件。


1、QTabWidget容器控件类

QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面。通过单击各选项卡可以查看对应的页面。如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分,分别放置在不同页面的选项卡中。


QTabWidget类中的常用方法如下表所示:


image.png


QTabWidget类中的常用信号如下表所示:


image.png


通过示例,了解QTabWidget容器控件类的使用方法,效果如下所示:




image.png




示例中,一个表单的内容分为三组,每一组小控件都显示在不同的选项卡中。顶层窗口是一个QTablWidget控件,将三个选项卡添加进去。


实现代码如下所示:


import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class TabDemo(QTabWidget):
  def __init__(self, parent=None):
  super(TabDemo, self).__init__(parent)   
  self.tab1 = QWidget()
  self.tab2 = QWidget()
  self.tab3 = QWidget()
  self.addTab(self.tab1,"Tab 1")
  self.addTab(self.tab2,"Tab 2")
  self.addTab(self.tab3,"Tab 3")
  self.tab1UI()
  self.tab2UI()
  self.tab3UI()
  self.setWindowTitle("Tab 例子")
  def tab1UI(self):
  layout = QFormLayout()
  layout.addRow("姓名",QLineEdit())
  layout.addRow("地址",QLineEdit())
  self.setTabText(0,"联系方式")
  self.tab1.setLayout(layout)
  def tab2UI(self):
  layout = QFormLayout()
  sex = QHBoxLayout()
  sex.addWidget(QRadioButton("男"))    
  sex.addWidget(QRadioButton("女"))
  layout.addRow(QLabel("性别"),sex)
  layout.addRow("生日",QLineEdit())
  self.setTabText(1,"个人详细信息")
  self.tab2.setLayout(layout)
  def tab3UI(self):
  layout=QHBoxLayout()
  layout.addWidget(QLabel("科目"))
  layout.addWidget(QCheckBox("物理"))
  layout.addWidget(QCheckBox("高数"))
  self.setTabText(2,"教育程度")
  self.tab3.setLayout(layout)
if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = TabDemo()
  demo.show()
  sys.exit(app.exec_())

2、QStackedWidget容器控件类

QStackedWidget是一个堆栈窗口控件,使用QStackedLayout布局,可以填充一些小控件,但同一时间只有一个小控件可以显示。QStackedWidget控件与QTabWidget类似,可以有效地显示窗口中的控件。


通过示例,了解QStackedWidget容器控件类的使用方法,效果如下所示:




image.png




示例中,在QStackedWidget对象中填充了三个子控件。每个子控件都可以有自己的布局,包含特定的表单元素。QStackedWidget控件不能在页面之间切换,它与当前选中的QListWidget控件中的选项进行连接。将QListWidget的currentRowChanged信号与display()槽函数相关联,从而改变堆叠控件的视图。


实现代码如下所示:


import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class StackedExample(QWidget):
  def __init__(self):
  super(StackedExample, self).__init__()
  self.setGeometry(300, 50, 10,10)
  self.setWindowTitle('StackedWidget 例子')
  self.leftlist = QListWidget ()
  self.leftlist.insertItem (0, '联系方式' )
  self.leftlist.insertItem (1, '个人信息' )
  self.leftlist.insertItem (2, '教育程度' )
  self.stack1= QWidget()
  self.stack2= QWidget()
  self.stack3= QWidget()
  self.stack1UI()
  self.stack2UI()
  self.stack3UI()
  self.Stack = QStackedWidget (self)
  self.Stack.addWidget (self.stack1)
  self.Stack.addWidget (self.stack2)
  self.Stack.addWidget (self.stack3)
  hbox = QHBoxLayout(self)
  hbox.addWidget(self.leftlist)
  hbox.addWidget(self.Stack)
  self.setLayout(hbox)
  self.leftlist.currentRowChanged.connect(self.display)
  def stack1UI(self):
  layout=QFormLayout()
  layout.addRow("姓名",QLineEdit())
  layout.addRow("地址",QLineEdit())
  self.stack1.setLayout(layout)
  def stack2UI(self):
  layout=QFormLayout()
  sex=QHBoxLayout()
  sex.addWidget(QRadioButton("男"))
  sex.addWidget(QRadioButton("女"))
  layout.addRow(QLabel("性别"),sex)
  layout.addRow("生日",QLineEdit())   
  self.stack2.setLayout(layout)
  def stack3UI(self):
  layout=QHBoxLayout()
  layout.addWidget(QLabel("科目"))
  layout.addWidget(QCheckBox("物理"))
  layout.addWidget(QCheckBox("高数"))
  self.stack3.setLayout(layout)
  def display(self,i):
  self.Stack.setCurrentIndex(i)
if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = StackedExample()
  demo.show()
  sys.exit(app.exec_())

3、QDockWidget容器控件类

QDockWidget是一个可以停靠在QMainWindow内的窗口控件,它可以保持在浮动状态或者在指定位置作为子窗口附加到主窗口中。QMainWindow类的主窗口对象保留有一个用于停靠窗口的区域,这个区域在控件的中央周围,如下图所示:


image.png


QDockWidget控件在主窗口内可以移动到新的区域。QDockWidget类中的常用方法如下表所示:


image.png


通过示例,了解QDockWidget容器控件类的使用方法,效果如下所示:


image.png


示例中,顶层窗口是一个QMainWindow对象,QTextEdit对象是它的中央小控件,创建可停靠的窗口items,然后,在停靠窗口items内添加QListWidget对象,最后,将停靠窗口放置在中央小控件的右侧。


实现代码如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class DockDemo(QMainWindow):
  def __init__(self, parent=None):
  super(DockDemo, self).__init__(parent)
  layout = QHBoxLayout()
  bar=self.menuBar()
  file=bar.addMenu("File")
  file.addAction("New")
  file.addAction("save")
  file.addAction("quit")
  self.items = QDockWidget("Dockable", self)
  self.listWidget = QListWidget()
  self.listWidget.addItem("item1")
  self.listWidget.addItem("item2")
  self.listWidget.addItem("item3")
  self.items.setWidget(self.listWidget)
  self.items.setFloating(False)
  self.setCentralWidget(QTextEdit())
  self.addDockWidget(Qt.RightDockWidgetArea, self.items)
  self.setLayout(layout)
  self.setWindowTitle("Dock 例子")
if __name__ == '__main__':
  app = QApplication(sys.argv)
  demo = DockDemo()
  demo.show()
  sys.exit(app.exec_())
相关文章
|
4月前
|
设计模式 SQL 人工智能
Python设计模式:从代码复用到系统架构的实践指南
本文以Python为实现语言,深入解析23种经典设计模式的核心思想与实战技巧。通过真实项目案例,展示设计模式在软件开发中的结构化思维价值,涵盖创建型、结构型、行为型三大类别,并结合Python动态语言特性,探讨模式的最佳应用场景与实现方式,帮助开发者写出更清晰、易维护的高质量代码。
194 1
|
4月前
|
设计模式 人工智能 算法
Python设计模式:从代码复用到系统架构的实践指南
本文探讨了电商系统中因支付方式扩展导致代码臃肿的问题,引出设计模式作为解决方案。通过工厂模式、策略模式、单例模式等经典设计,实现代码解耦与系统扩展性提升。结合Python语言特性,展示了模块化、装饰器、适配器等模式的实战应用,并延伸至AI时代的设计创新,帮助开发者构建高内聚、低耦合、易维护的软件系统。
316 0
|
2月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
4月前
|
设计模式 人工智能 算法
python 设计模式
工厂模式是一种创建型设计模式,通过定义创建对象的接口,将实例化延迟到子类,实现对象创建与使用的分离。它包括简单工厂模式、工厂方法模式和抽象工厂模式,适用于不同复杂度的对象创建场景,提高系统灵活性和可扩展性。
|
7月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
190 11
|
10月前
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
489 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
8月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
178 1
|
8月前
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
12月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
11月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。

推荐镜像

更多