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

目录

1、QTabWidget容器控件类

2、QStackedWidget容器控件类

3、QDockWidget容器控件类


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

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

1、QTabWidget容器控件类

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

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

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

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


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

实现代码如下所示:

  1. import sys

  2. from PyQt5.QtCore import *

  3. from PyQt5.QtGui import *

  4. from PyQt5.QtWidgets import *

  5. class TabDemo(QTabWidget):

  6. def __init__(self, parent=None):

  7. super(TabDemo, self).__init__(parent)

  8. self.tab1 = QWidget()

  9. self.tab2 = QWidget()

  10. self.tab3 = QWidget()

  11. self.addTab(self.tab1,"Tab 1")

  12. self.addTab(self.tab2,"Tab 2")

  13. self.addTab(self.tab3,"Tab 3")

  14. self.tab1UI()

  15. self.tab2UI()

  16. self.tab3UI()

  17. self.setWindowTitle("Tab 例子")

  18. def tab1UI(self):

  19. layout = QFormLayout()

  20. layout.addRow("姓名",QLineEdit())

  21. layout.addRow("地址",QLineEdit())

  22. self.setTabText(0,"联系方式")

  23. self.tab1.setLayout(layout)

  24. def tab2UI(self):

  25. layout = QFormLayout()

  26. sex = QHBoxLayout()

  27. sex.addWidget(QRadioButton("男"))

  28. sex.addWidget(QRadioButton("女"))

  29. layout.addRow(QLabel("性别"),sex)

  30. layout.addRow("生日",QLineEdit())

  31. self.setTabText(1,"个人详细信息")

  32. self.tab2.setLayout(layout)

  33. def tab3UI(self):

  34. layout=QHBoxLayout()

  35. layout.addWidget(QLabel("科目"))

  36. layout.addWidget(QCheckBox("物理"))

  37. layout.addWidget(QCheckBox("高数"))

  38. self.setTabText(2,"教育程度")

  39. self.tab3.setLayout(layout)

  40. if __name__ == '__main__':

  41. app = QApplication(sys.argv)

  42. demo = TabDemo()

  43. demo.show()

  44. sys.exit(app.exec_())

2、QStackedWidget容器控件类

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

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

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

实现代码如下所示:

  1. import sys

  2. from PyQt5.QtCore import *

  3. from PyQt5.QtGui import *

  4. from PyQt5.QtWidgets import *

  5. class StackedExample(QWidget):

  6. def __init__(self):

  7. super(StackedExample, self).__init__()

  8. self.setGeometry(300, 50, 10,10)

  9. self.setWindowTitle('StackedWidget 例子')

  10. self.leftlist = QListWidget ()

  11. self.leftlist.insertItem (0, '联系方式' )

  12. self.leftlist.insertItem (1, '个人信息' )

  13. self.leftlist.insertItem (2, '教育程度' )

  14. self.stack1= QWidget()

  15. self.stack2= QWidget()

  16. self.stack3= QWidget()

  17. self.stack1UI()

  18. self.stack2UI()

  19. self.stack3UI()

  20. self.Stack = QStackedWidget (self)

  21. self.Stack.addWidget (self.stack1)

  22. self.Stack.addWidget (self.stack2)

  23. self.Stack.addWidget (self.stack3)

  24. hbox = QHBoxLayout(self)

  25. hbox.addWidget(self.leftlist)

  26. hbox.addWidget(self.Stack)

  27. self.setLayout(hbox)

  28. self.leftlist.currentRowChanged.connect(self.display)

  29. def stack1UI(self):

  30. layout=QFormLayout()

  31. layout.addRow("姓名",QLineEdit())

  32. layout.addRow("地址",QLineEdit())

  33. self.stack1.setLayout(layout)

  34. def stack2UI(self):

  35. layout=QFormLayout()

  36. sex=QHBoxLayout()

  37. sex.addWidget(QRadioButton("男"))

  38. sex.addWidget(QRadioButton("女"))

  39. layout.addRow(QLabel("性别"),sex)

  40. layout.addRow("生日",QLineEdit())

  41. self.stack2.setLayout(layout)

  42. def stack3UI(self):

  43. layout=QHBoxLayout()

  44. layout.addWidget(QLabel("科目"))

  45. layout.addWidget(QCheckBox("物理"))

  46. layout.addWidget(QCheckBox("高数"))

  47. self.stack3.setLayout(layout)

  48. def display(self,i):

  49. self.Stack.setCurrentIndex(i)

  50. if __name__ == '__main__':

  51. app = QApplication(sys.argv)

  52. demo = StackedExample()

  53. demo.show()

  54. sys.exit(app.exec_())

3、QDockWidget容器控件类

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

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

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

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

实现代码如下所示:

 

。。。。。。。。。。。。。。。。。

版权原因,完整文章,请参考如下:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值