目录

1、QTabWidget容器控件类

2、QStackedWidget容器控件类

3、QDockWidget容器控件类


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

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

1、QTabWidget容器控件类

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

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

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

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

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

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

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

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

示例中,顶层窗口是一个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_())

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

  1. Python Qt GUI设计:窗口之间数据传递(拓展篇—5)

    目录 1.单一窗口数据传输 2.多窗口数据传输:调用属性 3.多窗口数据传输:信号与槽 在开发程序时,如果这个程序只有一个窗口,则应该关心这个窗口里面的各个控件之间是如何传递数据的.如果这个程序有多个 ...

  2. Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)

    为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成. 基于MIME类型的拖曳数据传输是基于QDrag类的.QMimeData对象将关联的数据与其对应的MIME类型相关 ...

  3. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  4. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  5. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  6. Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)

    目录 1.QPushButton按钮类 2.QRadioButton按钮类 3.QCheckBox按钮类 在GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作.在PyQt ...

  7. Python Qt GUI设计:将UI文件转换为Python文件的三种妙招(基础篇—2)

    目录 1.创建项目 2.将.ui文件生成.py文件 2.1.Eric 6编译 2.2.Python命令行编译 2.3.脚本编译 3.界面.逻辑分离思想 在开始本文之前提醒各位朋友,Python记得安装 ...

  8. Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

    目录 1.菜单栏 1.1.Qt Creator创建菜单栏 1.2. 菜单栏类创建菜单栏 2.工具栏 2.1.Qt Creator创建工具栏 2.2. 工具栏类创建工具栏 3.状态栏 在使用Qt Cre ...

  9. Python Qt GUI设计:QTableView、QListView、QListWidet、QTableWidget、QTreeWidget和QTreeWidgetltem表格和树类(提升篇—1)

    目录 1.QTableView类 2.QListView类 3.QListWidet类 4.QTableWidget类 5.QTreeWidget和QTreeWidgetltem类 表格与树解决的问题 ...

最新文章

  1. mybatis-plus对datetime返回去掉.0_华为AI认证-TensorFlow2.0编程基础
  2. 定义对象或数组直接量时不同引擎对多余逗号的处理
  3. python中全局变量和局部变量关键字_Python中全局变量和局部变量的理解与区别
  4. 一张图,看懂阿里云12年的“飞天日记”
  5. 返回值与返回引用的问题
  6. UVA 12563 Jin Ge Jin Qu hao
  7. [二分]TYVJ1359 收入计划
  8. Mybatis批量insert报错的解决办法【the right syntax to use near '' at line...】
  9. 将pdm换成mysql表结构 报错_MySQL随机生成百万级别数据
  10. xpraid安装_XP系统怎么安装raid驱动|XP系统安装raid驱动的方法
  11. b站用户年龄段占比_用户和电商变现上,微博、小红书、B站差别在哪里?
  12. 洞察Tungsten Fabric内部的XMPP
  13. 2021年中国资产管理业务总体存量及促进资产管理行业健康发展的对策分析[图]
  14. how to assign more that 31 VFs to one VM
  15. VBScript UBound 函数
  16. C++反射:全方位解读Lura库的前世今生!
  17. python基础(24)IO编程
  18. 建设工程项目全寿命周期管理是指_工程项目全寿命周期管理.ppt
  19. SVM算法教科书(一)
  20. java双人对战五子棋(socket通信)

热门文章

  1. MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
  2. TypeError(“cannot concatenate ‘str‘ and ‘instancemethod‘ objects“,)
  3. This version of Android Studio cannot open this project, please retry with Android Studio 3.5 or new
  4. error: unbound prefix. Message{kind=ERROR, text=error: unbound prefix., sources=[E:\work\me\fragment
  5. 自己理解接口回调入门
  6. iOS开发8:使用Tool Bar切换视图
  7. POJ 3268 D-Silver Cow Party
  8. 数组--存储地址的计算
  9. 中国互联网+户外广告行业商业模式创新与投资机会深度研究报告
  10. Linux常用压缩与解压缩命令