目录
7、QDateTimeEdit、QDateEdit、QTimeEdit
一、输入类控件
这类控件比较多,这里只列一些常用的
1、QLineEdit
详情见官网:QLineEdit详细说明
这里简单介绍下两点:回显模式和输入约束。
回显模式即输入的字符的显示模式,通过setEchoMode()设置
常量 | 值 | 说明 |
---|---|---|
QLineEdit::Normal | 0 | 默认模式,正常显示 |
QLineEdit::NoEcho | 1 | 什么都不显示,一般用于连密码长度都保密的极端情况 |
QLineEdit::Password | 2 | 显示平台无关的密码样式,一般是●或者* |
QLineEdit::PasswordEchoOnEdit | 3 | 正在输入的时候正常显示,输完之后变成密码样式 |
输入约束即限制QLineEdit的输入内容,一般有两种约束方式:validator和inputMask
validator的详细用法参见:QValidator详细说明
这里主要说下inputMask,这种方式对大部分情况就已经够用了。
inputMask是一个字符串,其内的每个字符都是以下类型的一种:
掩码字符 | 决定这里可以输入什么样的值 |
元字符 | 代表一个特殊含义 |
分隔符 | 所有非掩码字符和元字符的字符都作为一个不可变的分隔符 |
所有的掩码字符和元字符:
掩码字符 | 含义 |
---|---|
A | 只能输入字母类型的字符, 比如 A-Z, a-z. |
a | 等同A,但是可以输入空格 |
N | 只能输入字母或数字类型的字符, 比如 A-Z, a-z, 0-9. |
n | 等同N,但是可以输入空格 |
X | 任意非空白字符 |
x | 等同X,但是可以输入空格 |
9 | 只能输入数字 0-9. |
0 | 等同9,但是可以输入空格 |
D | 只能输入非0数字 1-9 |
d | 等同D,但是可以输入空格 |
# | 只能+、-、0-9、空格 |
H | 十六进制字符 A-F, a-f, 0-9. |
h | 等同H,但是可以输入空格 |
B | 二进制字符:0或1 |
b | 等同B,但是可以输入空格 |
元字符 | 含义 |
> | 后面输入的所有字母类型的字符都会被转换成大写 |
< | 后面输入的所有字母类型的字符都会被转换成小写 |
! | 停止大小写转换 |
;c | 终止inputMask并将空白字符都设置成c |
[ ] { } | 保留,目前不起作用,会被忽略掉 |
\ | 清除上面所列的掩码字符和元字符作用,说白了就是把一个掩码字符或元字符变成一个分隔符 |
下面用代码示例一下用法:
self.le_user1.setInputMask("AAAAAA")
# 6个任意字母
self.le_user2.setInputMask("AA>AADD")
# 2个任意字母,接着的2个字母会自动被转为大写,两个非0数字
self.le_user3.setInputMask("AA>A!Add")
# 2个任意字母,接着1个字母自动转大写,接着1个任意字母,接着2个数字或空格
self.le_user4.setInputMask("999.999.999.999;_")
# 一个ip地址格式的串,未输入之前显示___.___.___.___
self.le_user5.setInputMask("\AAAAAA")
#第一个字符固定是A,后接5个任意字母
self.le_user6.setInputMask("A1A2A3A")
#任意字母+1+任意字母+2+任意字母+3+任意字母
未输入之前显示如下:
输入之后:
2、QComboBox
下拉列表框,具体看官网文档吧:QComboBox详细说明
3、QFontComboBox
展示系统字体的QComboBox:QFontComboBox详细说明
4、QTextEdit
多行输入框:QTextEdit详细说明
5、QPlainTextEdit
和QTextEdit区别就是QPlainTextEdit 只能显示纯文本,而QTextEdit可以显示富文本,具体见:QPlainTextEdit详细说明
6、QSpinBox和QDoubleSpinBox
微调框,一个整数,一个小数:QSpinBox详细说明、QDoubleSpinBox详细说明
7、QDateTimeEdit、QDateEdit、QTimeEdit
日期时间编辑控件,见名知意吧,QDateEdit、QTimeEdit都是继承自QDateTimeEdit,QDateEdit和QDateTimeEdit都可以设置点击之后弹出日历界面选择日期,QTimeEdit不行,更多用法见官网文档:QTimeEdit详细说明、QDateTimeEdit详细说明、QDateEdit详细说明
8、QSlider
滑块,通过setOrientation()可以决定是水平还是垂直滑块:QSlider详细说明
9、QDial
类似圆形刻度表盘:QDial详细说明
10、QScrollBar
滚动条,这个一般用不到,pyqt的可滚动控件都带有滚动条,这个一般是在子类化QAbstractScrollArea实现自定义的可滚动控件时才会配合使用:QScrollBar详细说明
二、容器类控件
前面已经说过,pyqt中,大到窗体,小到文本标签,其实都是QWidget,所以QWidget其实就是最根本的容器控件,QFrame继承自QWidget,又衍生出了QAbstractScrollArea,pyqt的容器类控件都是继承自这三个控件。
1、QGroupBox
QGroupBox提供一个窗口和一个标题,QGroupBox不能直接添加Widget,需要先用一个layout把子widget都组织起来,然后把layout设置给QGroupBox。具体用法:QGroupBox详细说明
self.group_box = QGroupBox('爱好')
self.group_box.setCheckable(True)
self.a_1 = QCheckBox('游泳')
self.a_2 = QCheckBox('游戏')
self.a_3 = QCheckBox('看书')
self.a_4 = QCheckBox('爬山')
self.group_layout = QVBoxLayout()
self.group_layout.addWidget(self.a_1)
self.group_layout.addWidget(self.a_2)
self.group_layout.addWidget(self.a_3)
self.group_layout.addWidget(self.a_4)
self.group_box.setLayout(self.group_layout)
2、QScrollArea
QScrollArea用于给子widget提供滚动效果,子widget必须通过setWidget()指定,如果是通过setLayout()设置了layout的话,是没有滚动效果的,具体见:QScrollArea详细说明。
self.scroll_area = QScrollArea()
self.temp = QWidget()
self.btn1 = QPushButton('第1个按钮')
self.btn2 = QPushButton('第2个按钮')
self.btn3 = QPushButton('第3个按钮')
self.btn4 = QPushButton('第4个按钮')
self.btn5 = QPushButton('第5个按钮')
self.btn6 = QPushButton('第6个按钮')
self.btn7 = QPushButton('第7个按钮')
self.scroll_layout = QVBoxLayout()
self.scroll_layout.addWidget(self.btn1)
self.scroll_layout.addWidget(self.btn2)
self.scroll_layout.addWidget(self.btn3)
self.scroll_layout.addWidget(self.btn4)
self.scroll_layout.addWidget(self.btn5)
self.scroll_layout.addWidget(self.btn6)
self.scroll_layout.addWidget(self.btn7)
self.temp.setLayout(self.scroll_layout)
self.scroll_area.setWidget(self.temp)
//说明:如果直接self.scroll_area.setLayout(self.scroll_layout)是没有滚动效果的
3、QStackedWidget
QStackedWidget是一个实现在QStackedLayout之上的便捷控件,同一时刻只有一个子widget能显示出来,具体参见:QStackedWidget详细说明
4、QTabWidget
可以这么理解,QTabWidget就是一个选项卡+一个QStackedWidget,QStackedWidget是没有提供一种外在的切换子widget的方式的,QTabWidget则可以通过选项卡来切换子widget的显示,QTabWidget具体用法参见:QTabWidget详细说明
self.btn1 = QPushButton('第1个按钮')
self.btn2 = QPushButton('第2个按钮')
self.btn3 = QPushButton('第3个按钮')
self.tab_widget = QTabWidget()
self.tab_widget.addTab(self.btn1, "按钮1")
self.tab_widget.addTab(self.btn2, "按钮2")
self.tab_widget.addTab(self.btn3, "按钮3")
5、QToolBox
QToolBox的效果和QTabWidget有点类型,不过它是一列选项,QToolBox通过addItem()来添加选项,需要提供子widget和选项名称,具体参见:QToolBox详细说明
self.tool_box = QToolBox()
self.tool_box.addItem(QPushButton('按钮1'), "选项1")
self.tool_box.addItem(QPushButton('按钮2'), "选项2")
self.tool_box.addItem(QPushButton('按钮3'), "选项3")
QToolBox
6、QMdiArea
QMdiArea通常用作QMainWindow中的中心小部件,用于创建MDI应用程序。QMdiArea的子widget都是QMdiSubWindow 的实例,通过addSubWindow()添加子widget,更多用法见:QMdiArea详细说明
self.mdiArea = QMdiArea()
self.sub1 = QMdiSubWindow()
self.sub2 = QMdiSubWindow()
self.mdiArea.addSubWindow(self.sub1)
self.mdiArea.addSubWindow(self.sub2)
self.setCentralWidget(self.mdiArea)
7、QDockWidget
QDockWidget类提供了一个小部件,它可以停靠在QMainWindow中,也可以作为桌面上的顶级窗口浮动。具体参见:QDockWidget详细说明。官网还有示例代码。