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

简介: 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_())
相关文章
|
5月前
|
缓存 供应链 芯片
电子元件类商品 item_get - 商品详情接口深度分析及 Python 实现
电子元件商品接口需精准返回型号参数、规格属性、认证及库存等专业数据,支持供应链管理与采购决策。本文详解其接口特性、数据结构与Python实现方案。
|
10月前
|
人工智能 Python
[oeasy]python083_类_对象_成员方法_method_函数_function_isinstance
本文介绍了Python中类、对象、成员方法及函数的概念。通过超市商品分类的例子,形象地解释了“类型”的概念,如整型(int)和字符串(str)是两种不同的数据类型。整型对象支持数字求和,字符串对象支持拼接。使用`isinstance`函数可以判断对象是否属于特定类型,例如判断变量是否为整型。此外,还探讨了面向对象编程(OOP)与面向过程编程的区别,并简要介绍了`type`和`help`函数的用法。最后总结指出,不同类型的对象有不同的运算和方法,如字符串有`find`和`index`方法,而整型没有。更多内容可参考文末提供的蓝桥、GitHub和Gitee链接。
247 11
|
测试技术 Python
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
625 31
【03】做一个精美的打飞机小游戏,规划游戏项目目录-分门别类所有的资源-库-类-逻辑-打包为可玩的exe-练习python打包为可执行exe-优雅草卓伊凡-持续更新-分享源代码和游戏包供游玩-1.0.2版本
|
12月前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
11月前
|
存储 C语言 Python
[oeasy]python077_int类型怎么用_整数运算_integer_进制转化_int类
本文主要讲解了Python中`int`类型的应用与特性。首先回顾了`int`词根的溯源,探讨了整型变量的概念及命名规则(如匈牙利命名法)。接着分析了整型变量在内存中的存储位置和地址,并通过`type()`和`id()`函数验证其类型和地址。还介绍了整型变量的运算功能,以及如何通过`int()`函数将字符串转化为整数,支持不同进制间的转换(如二进制转十进制)。此外,文章提及了关键字`del`的使用场景,对比了Python与C语言中`int`的区别,并总结了整型与字符串类型的差异,为后续深入学习奠定基础。
260 1
|
Ubuntu NoSQL Linux
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
622 6
《docker基础篇:3.Docker常用命令》包括帮助启动类命令、镜像命令、有镜像才能创建容器,这是根本前提(下载一个CentOS或者ubuntu镜像演示)、容器命令、小总结
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
333 0
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
598 4
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。
|
索引 Python
python-类属性操作
【10月更文挑战第11天】 python类属性操作列举
166 1

推荐镜像

更多