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_())
相关文章
|
3月前
|
测试技术 开发者 Python
Python(GUI)之活动积分记录表
本文介绍了一套使用Python的Tkinter库构建的学生活动积分记录系统。该系统允许教师选择班级和学生,输入加分分数及原因,并将数据保存至文件,旨在简化学生积分管理流程,提升教学效率。
73 6
|
3月前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
1月前
|
存储 人工智能 Python
[oeasy]python061_如何接收输入_input函数_字符串_str_容器_ 输入输出
本文介绍了Python中如何使用`input()`函数接收用户输入。`input()`函数可以从标准输入流获取字符串,并将其赋值给变量。通过键盘输入的值可以实时赋予变量,实现动态输入。为了更好地理解其用法,文中通过实例演示了如何接收用户输入并存储在变量中,还介绍了`input()`函数的参数`prompt`,用于提供输入提示信息。最后总结了`input()`函数的核心功能及其应用场景。更多内容可参考蓝桥、GitHub和Gitee上的相关教程。
16 0
|
3月前
|
开发者 Docker Python
从零开始:使用Docker容器化你的Python Web应用
从零开始:使用Docker容器化你的Python Web应用
108 1
|
3月前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
3月前
|
设计模式 监控 算法
Python编程中的设计模式应用与实践感悟###
在Python这片广阔的编程疆域中,设计模式如同导航的灯塔,指引着开发者穿越复杂性的迷雾,构建出既高效又易于维护的代码结构。本文基于个人实践经验,深入探讨了几种核心设计模式在Python项目中的应用策略与实现细节,旨在为读者揭示这些模式背后的思想如何转化为提升软件质量的实际力量。通过具体案例分析,展现了设计模式在解决实际问题中的独特魅力,鼓励开发者在日常编码中积极采纳并灵活运用这些宝贵的经验总结。 ###
|
3月前
|
数据可视化 开发者 Python
Python GUI开发:Tkinter与PyQt的实战应用与对比分析
【10月更文挑战第26天】本文介绍了Python中两种常用的GUI工具包——Tkinter和PyQt。Tkinter内置于Python标准库,适合初学者快速上手,提供基本的GUI组件和方法。PyQt基于Qt库,功能强大且灵活,适用于创建复杂的GUI应用程序。通过实战示例和对比分析,帮助开发者选择合适的工具包以满足项目需求。
255 7
|
3月前
|
设计模式 监控 数据库连接
Python编程中的设计模式之美:提升代码质量与可维护性####
【10月更文挑战第21天】 一段简短而富有启发性的开头,引出文章的核心价值所在。 在编程的世界里,设计模式如同建筑师手中的蓝图,为软件的设计和实现提供了一套经过验证的解决方案。本文将深入浅出地探讨Python编程中几种常见的设计模式,通过实例展示它们如何帮助我们构建更加灵活、可扩展且易于维护的代码。 ####
|
3月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
4月前
|
设计模式 开发者 Python
Python编程中的设计模式:从入门到精通####
【10月更文挑战第14天】 本文旨在为Python开发者提供一个关于设计模式的全面指南,通过深入浅出的方式解析常见的设计模式,帮助读者在实际项目中灵活运用这些模式以提升代码质量和可维护性。文章首先概述了设计模式的基本概念和重要性,接着逐一介绍了几种常用的设计模式,并通过具体的Python代码示例展示了它们的实际应用。无论您是Python初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和实用的技巧。 ####

热门文章

最新文章

推荐镜像

更多