Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」有时候我们可能会面临这样一种情况:所开发的程序包含了太多的控件,导致一个窗口装载不下或者装载的控件太多而不美观。本篇博文就来解决这个问题,即如何在现有的窗口空间中装载更多的控件。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

目录

1、QTabWidget容器控件类

2、QStackedWidget容器控件类

3、QDockWidget容器控件类


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

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

1、QTabWidget容器控件类

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

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

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

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

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

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

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

示例中,一个表单的内容分为三组,每一组小控件都显示在不同的选项卡中。顶层窗口是一个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容器控件类的使用方法,效果如下所示:

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

示例中,在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类的主窗口对象保留有一个用于停靠窗口的区域,这个区域在控件的中央周围,如下图所示:

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

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

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

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

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)「建议收藏」

示例中,顶层窗口是一个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_())
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190098.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Django接口_django中几个html互相跳转

    Django接口_django中几个html互相跳转前言在RESTful规范中,有关版本的问题,用restful规范做开放接口的时候,用户请求API,系统返回数据。但是难免在系统发展的过程中,不可避免的需要添加新的资源,或者修改现有资源。因此,改动升

    2022年7月29日
    15
  • 使用USB转485编程电缆连接西门子 S7-200的软件配置方法以及可能出现的问题[通俗易懂]

    使用USB转485编程电缆连接西门子 S7-200的软件配置方法以及可能出现的问题[通俗易懂]1安装驱动与PC-PPI编程电缆不同,USB转485编程电缆通常需要驱动。驱动安装完成后,将电缆插入电脑USB口,打开电脑设备管理器,观察端口COM是否生成。未插入编程线缆之前不存在COM3。2配置编程软件打开编程软件,点击【设置PG/PC接口】,选择【PC/PPIcable(PPI)】接口:点击属性,注意在【PPI】栏中不能勾选【高级PPI】和【多主站网络】:在【本地连接】中选择与设备管理器中一致的端口,此处为COM3:点击确定退出,软件配置完成,PC与PLC连接成功。.

    2022年5月18日
    156
  • STM32 SPI详解[通俗易懂]

    STM32 SPI详解[通俗易懂]本文的程序是主控室STM32F107各种宏定义和文件会在末尾说明1、SPI简介SPI,是英语SerialPeripheralinterface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,

    2022年6月18日
    38
  • 女儿满月请柬正确的书写格式图片_乔迁请柬怎么写 范文

    女儿满月请柬正确的书写格式图片_乔迁请柬怎么写 范文XXX台启:谨于公元二零零九年公历二月二十一日农历正月二十七日(星期六)为爱女举办满月之喜薄酌恭请阖第光临席设:土湖新美味城(一分店)时间:中午十一点半XXX敬邀满月酒请帖是满月

    2022年8月3日
    7
  • Pyhton Cookbook 学习笔记 ch9_02 元编程[通俗易懂]

    Pyhton Cookbook 学习笔记 ch9_02 元编程[通俗易懂]【传送门】9.8将装饰器定义为类的一部分问题:想在类中定义装饰器,并作用在其他的函数上方案:在类中定义装饰器首先要确定它的使用方法,是作为一个实例方法还是作为一个类方法fromfunctoolsimportwrapsclassA:#作为一个实例方法defdecorator1(self,func):@wraps(func)…

    2022年6月3日
    33
  • 【CBIR】基于内容的图像检索技(CBIR)术相术介绍「建议收藏」

    【CBIR】基于内容的图像检索技(CBIR)术相术介绍「建议收藏」基于内容的图像检索技(CBIR)术相术介绍转载之:kezunhai 出处:http://blog.csdn.net/kezunhai        近20年来,计算机与信号处理领域如火如荼地发展着,随着普通计算机的性能不断地提高,人们对计算机处理信息的能力及要求不断地提高。传统的基于文本检索技术已经难以满足人们的需求,图片作为人们对周围世界的感知媒

    2025年10月22日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号