3.常用组件

1.标签(QLabel)和单行文本框(QLineEdit)

QLabel用于显示文本或图像的标签,QLineEdit用于单行文本输入框,用于接受用户的文本输入

1.1 标签用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sys

from PySide6.QtWidgets import QApplication, QLabel, QLineEdit, QStackedLayout, \
QWidget, \
QPushButton, \
QVBoxLayout
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QVBoxLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
# 创建一个QLabel,显示中文文本
label1 = QLabel('用户名')
label2 = QLabel('密码')

layout = self.layout()
# 将QLabel添加到布局中
layout.addWidget(label1)
layout.addWidget(label2)

if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

1.2 单行文本框用法

为用户名和密码添加可以输入文本的框,这就用到QLineEdit,在上面的代码上基础上修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys

from PySide6.QtWidgets import QApplication, QLabel, QLineEdit, QStackedLayout, \
QWidget, \
QPushButton, \
QVBoxLayout
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QVBoxLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
# 创建一个QLabel,显示中文文本
label1 = QLabel('用户名')
label2 = QLabel('密码')
line_edit1 = QLineEdit()
line_edit2 = QLineEdit()

layout = self.layout()
# 将QLabel添加到布局中
layout.addWidget(label1)
layout.addWidget(label2)
layout.addWidget(line_edit1)
layout.addWidget(line_edit2)

if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

1.3 使用网格布局器优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import sys

from PySide6.QtWidgets import QApplication, QGridLayout, QLabel, QLineEdit, QStackedLayout, \
QWidget, \
QPushButton, \
QVBoxLayout
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
# 创建一个QLabel,显示中文文本
label1 = QLabel('用户名')
label2 = QLabel('密码')
line_edit1 = QLineEdit()
line_edit2 = QLineEdit()

layout = self.layout()
# 将QLabel添加到布局中
layout.addWidget(label1, 0, 0)
layout.addWidget(label2, 1, 0)
layout.addWidget(line_edit1, 0, 1)
layout.addWidget(line_edit2, 1, 1)

if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

网格解读

网格管理器把窗口划分为网格,行和列的索引从 0 开始

1
2
3
4
5
6
layout.addWidget(label1,0,0)
layout.addWidget(label2,1,0)

# 将QLineEdit添加到布局中
layout.addWidget(line_edit1,0,1)
layout.addWidget(line_edit2,1,1)

表示分别把标签 1 放在(0,0)的格子里,把文本框 1 放在(0,1)格子里,这样就达到了在同一行的目的。第二行也是同样的原理。

1.4 QLabel 常用属性

属性说明
alignment:标签内容的对齐方式可以使用 setAlignment()方法设置。对齐方式可以是左对齐、右对齐、居中
indent:标签文本的缩进(以像素为单位)可以使用 setIndent()方法设置
margin:标签内容周围边距的宽度可以使用 setMargin()方法设置
pixmap:标签显示的图片可以使用 setPixmap()方法设置
text:标签的文本内容可以使用 setText()方法设置
textFormat:标签的文本格式可以使用 setTextFormat()方法设置
wordWrap:布尔属性,指示标签的自动换行策略可以使用 setWordWrap()方法设置。如果启用自动换行,文本将根据标签的宽度自动换行显示。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys

from PySide6.QtWidgets import QApplication, QGridLayout, QLabel, QLineEdit, QStackedLayout, \
QWidget, \
QPushButton, \
QVBoxLayout
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QVBoxLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

label1 = QLabel()
label1.setText("Cyber psychosis") # 设置文本内容
label1.setIndent(10) # 设置文本缩进

label2 = QLabel("Hello, World!")
label2.setAlignment(Qt.AlignCenter) # 设置对齐方式
label2.setMargin(10) # 设置边距

label3 = QLabel("这是一个演示这是一个演示这是一个演示这是一个演示!")
label3.setTextFormat(Qt.RichText)
label3.setWordWrap(True) # 设置自动换行

layout.addWidget(label1)
layout.addWidget(label2)
layout.addWidget(label3)


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

1.5 QLineEdit 常用属性和方法

属性说明
line_edit.text()获取文本框的内容
line_edit.setText()设置文本框的内容
line_edit.setPlaceholderText()设置文本框的占位符文本,用于在未输入时显示
line_edit.setEchoMode()设置文本框的回显模式,可以设置为密码模式
line_edit.setReadOnly()设置文本框为只读模式
line_edit.setMaxLength()设置文本框的最大长度
line_edit.setValidator()设置文本框的验证器
line_edit.clear()清空文本框的内容
line_edit.setInputMask("000-00-00")设置输入掩码,限制用户输入的格式
line_edit.setClearButtonEnabled(True)启用或禁用清除按钮,允许用户一键清空输入内容
line_edit.selectAll()选中文本框的所有内容
line_edit.setFocus()设置文本框为焦点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import sys

from PySide6.QtWidgets import QApplication, QGridLayout, QLabel, QLineEdit, QStackedLayout, \
QWidget, \
QPushButton, \
QVBoxLayout
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

label1 = QLabel("账号: ")
label2 = QLabel("密码: ")
label3 = QLabel("日期: ")

edit1 = QLineEdit()
edit1.setText("New text") # 设置文本框的默认文本
edit1.text() # 获取文本框的文本
edit1.setClearButtonEnabled(True) # 设置文本框的清除按钮

edit2 = QLineEdit()
edit2.setPlaceholderText("请输入密码, 最长 6 位") # 设置文本框的占位符
edit2.setEchoMode(QLineEdit.Password) # 设置文本框的显示模式
edit2.setMaxLength(6) # 设置文本框的最大长度

edit3 = QLineEdit()
edit3.setInputMask("9999-99-99")

layout.addWidget(label1, 0, 0)
layout.addWidget(edit1, 0, 1)
layout.addWidget(label2, 1, 0)
layout.addWidget(edit2, 1, 1)
layout.addWidget(label3, 2, 0)
layout.addWidget(edit3, 2, 1)


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

2.按钮(QPushButton)

属性和方法说明
button.text()获取按钮的文本
button.setText()设置按钮的文本
button.setIcon()设置按钮的图标
button.setToolTip()设置按钮的提示信息
button.setEnabled()设置按钮是否可用
button.setShortcut()设置按钮的快捷键
button.setCheckable()设置按钮是否可选中
button.setChecked()设置按钮是否选中
button.setFlat()设置按钮是否为扁平样式
button.setAutoDefault()设置按钮是否为默认按钮
button.setDefault()设置按钮是否为默认按钮
button.clicked.connect()连接按钮的点击信号到槽函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import sys

from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QGridLayout, QLabel, QLineEdit, QStackedLayout, \
QWidget, \
QPushButton, \
QVBoxLayout
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

but1 = QPushButton("取消")
but1.setIcon(QIcon("images.jpeg")) # 设置按钮图标
but1.setShortcut("Ctrl+Q") # 设置按钮快捷键
but1.clicked.connect(self.on_button_clicked) # 连接按钮点击事件

but2 = QPushButton("确定")
but2.setEnabled(False) # 设置按钮不可用
but2.setStyleSheet("background-color: red") # 设置按钮背景颜色

layout.addWidget(but1, 0, 0)
layout.addWidget(but2, 0, 1)

def on_button_clicked(self):
self.sender().setText("已点击")


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

3.多行文本框(QTextEdit)

属性和方法说明
text_edit.toPlainText()获取文本框的文本
text_edit.cut()剪切文本框中选中的文本
text_edit.copy()复制文本框中选中的文本
text_edit.paste()粘贴文本框中的文本
text_edit.setPlainText()设置文本框的文本
text_edit.append()在文本框的末尾添加文本
text_edit.clear()清空文本框的内容
text_edit.setReadOnly()设置文本框为只读模式
text_edit.setLineWrapMode()设置文本框的换行模式
text_edit.setWordWrapMode()设置文本框的自动换行模式
text_edit.setLineWrapColumnOrWidth()设置文本框的换行列数或宽度
text_edit.setWordWrapWidth()设置文本框的自动换行宽度
text_edit.setTabStopWidth()设置文本框的制表符宽度
text_edit.setAcceptRichText()设置文本框是否接受富文本
text_edit.setHtml()设置文本框的 HTML 内容
text_edit.insertHtml()在文本框的光标位置插入 HTML 内容
text_edit.insertPlainText()在文本框的光标位置插入纯文本
text_edit.textChanged.connect()连接文本框的文本改变信号到槽函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import sys

from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QGridLayout, QPushButton, QTextEdit, QWidget


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

self.text_edit = QTextEdit()
self.text_edit.setPlainText("Hello, World!") # 设置文本框的文本内容

button = QPushButton("Click me!") # 创建一个按钮
button.clicked.connect(self.on_button_clicked)

layout.addWidget(self.text_edit)
layout.addWidget(button)

def on_button_clicked(self):
self.text_edit.append("Button clicked!")


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

4.下拉框(QComboBox)

属性和方法说明
combo_box.currentText()获取下拉框当前选中的文本
combo_box.currentIndex()获取下拉框当前选中的索引
combo_box.setCurrentText()设置下拉框当前选中的文本
combo_box.setCurrentIndex()设置下拉框当前选中的索引
combo_box.addItem()添加一个选项
combo_box.insertItem()插入一个选项
combo_box.removeItem()移除一个选项
combo_box.clear()清空所有选项
combo_box.count()获取选项的数量
combo_box.itemText()获取指定索引的选项文本
combo_box.itemData()获取指定索引的选项数据
combo_box.setItemText()设置指定索引的选项文本
combo_box.setItemData()设置指定索引的选项数据
combo_box.currentIndexChanged.connect()连接下拉框的选中项改变信号到槽函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import sys

from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QComboBox, QGridLayout, QLabel, QPushButton, QTextEdit, QWidget


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
# self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

label1 = QLabel("选择一项: ")
label2 = QLabel("选择的是: ")
self.label3 = QLabel()

self.combox = QComboBox()
self.combox.addItems(["选项 1", "选项 2", "选项 3"])
self.combox.currentIndexChanged.connect(self.on_combobox_changed) # 信号与槽

layout.addWidget(label1, 0, 0)
layout.addWidget(self.combox, 0, 1)
layout.addWidget(label2, 1, 0)
layout.addWidget(self.label3, 1, 1)

def on_combobox_changed(self):
t = self.combox.currentText()
self.label3.setText(t)


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

5.复选框(QCheckBox)

属性和方法说明
check_box.text()获取复选框的文本
check_box.setText()设置复选框的文本
check_box.isChecked()获取复选框的选中状态
check_box.setChecked()设置复选框的选中状态
check_box.stateChanged.connect()连接复选框的状态改变信号到槽函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys

from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QCheckBox, QComboBox, QGridLayout, QLabel, QPushButton, QTextEdit, QWidget


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
# self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

label1 = QLabel("姓名:")
self.label2 = QLabel("请选择一个人")

self.check_boxes = {
"张三": QCheckBox("张三"),
"李四": QCheckBox("李四"),
"王五": QCheckBox("王五")
}

for i, (name, checkbox) in enumerate(self.check_boxes.items()):
checkbox.stateChanged.connect(self.on_check_box_state_changed)
layout.addWidget(checkbox, 1, i)

layout.addWidget(label1, 0, 0)
layout.addWidget(self.label2, 0, 1, 1, 2)

def on_check_box_state_changed(self):
selected_names = [name for name, checkbox in self.check_boxes.items() if checkbox.isChecked()]
self.label2.setText(", ".join(selected_names) if selected_names else "请选择一个人")


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

6.单选框(QRadioButton)

属性和方法说明
radio_button.text()获取单选框的文本
radio_button.setText()设置单选框的文本
radio_button.isChecked()获取单选框的选中状态
radio_button.setChecked()设置单选框的选中状态
radio_button.toggled.connect()连接单选框的状态改变信号到槽函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import sys

from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QApplication, QButtonGroup, QCheckBox, QComboBox, QGridLayout, QLabel, QPushButton, \
QRadioButton, \
QTextEdit, QWidget


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
# self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

label1 = QLabel("姓名:")
label2 = QLabel("性别: ")
self.label3 = QLabel()
self.label4 = QLabel()

self.radio_buttons_name = self.create_radio_buttons(["张三", "李四", "王五"], self.name_on_radio_buttons_changed)
self.radio_buttons_sex = self.create_radio_buttons(["男", "女", "保密"], self.sex_on_radio_buttons_changed)

for i, radio in enumerate(self.radio_buttons_name):
layout.addWidget(radio, 0, i+2)

for i, radio in enumerate(self.radio_buttons_sex):
layout.addWidget(radio, 1, i+2)

layout.addWidget(label1, 0, 0)
layout.addWidget(label2, 1, 0)
layout.addWidget(self.label3, 0, 1)
layout.addWidget(self.label4, 1, 1)

def create_radio_buttons(self, labels, slot):
""" 创建单选按钮 """
radio_buttons = []
button_group = QButtonGroup(self) # 创建按钮组
for label in labels:
radio = QRadioButton(label) # 创建单选按钮
radio.toggled.connect(slot) # 绑定槽函数
button_group.addButton(radio) # 将单选按钮添加到按钮组
radio_buttons.append(radio) # 将单选按钮添加到列表
return radio_buttons

def name_on_radio_buttons_changed(self):
""" 姓名单选按钮选中状态改变时触发 """
selected_names = [radio.text() for radio in self.radio_buttons_name if radio.isChecked()]
self.label3.setText(selected_names[0])

def sex_on_radio_buttons_changed(self):
""" 性别单选按钮选中状态改变时触发 """
selected_sex = [radio.text() for radio in self.radio_buttons_sex if radio.isChecked()]
self.label4.setText(selected_sex[0])


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

7.整数输入框(QSpinBox) 和 复数输入框QDoubleSpinBox

属性和方法说明
spin_box.value()获取整数输入框的值
spin_box.setValue()设置整数输入框的值
spin_box.minimum()获取整数输入框的最小值
spin_box.setMaximum()设置整数输入框的最大值
spin_box.setRange()设置整数输入框的范围
spin_box.setSingleStep()设置整数输入框的步长
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import sys

from PySide6.QtWidgets import QApplication, QDoubleSpinBox, QGridLayout, QSpinBox, QWidget


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
# self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

spin_box = QSpinBox()
spin_box.setRange(0, 100)
spin_box.setValue(50)
spin_box.setSingleStep(5)

double_spin_box = QDoubleSpinBox()
double_spin_box.setRange(0, 10)
double_spin_box.setValue(3.14)
double_spin_box.setSingleStep(0.1)

layout.addWidget(spin_box, 0, 0)
layout.addWidget(double_spin_box, 1, 0)


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

8.滑块(QSlider)

属性和方法说明
slider.value()获取滑块的值
slider.setValue()设置滑块的值
slider.minimum()获取滑块的最小值
slider.setMaximum()设置滑块的最大值
slider.setRange()设置滑块的范围
slider.setSingleStep()设置滑块的步长
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import sys

from PySide6.QtWidgets import QApplication, QGridLayout, QLabel, QSlider, QWidget
from PySide6.QtCore import Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

label1 = QLabel("水平滑块的值: 50")
label1.setStyleSheet("width: 200px; height: 20px;")
label2 = QLabel("垂直滑块的值: 50")
label2.setStyleSheet("width: 200px; height: 20px;")

slider_horizontal = QSlider(Qt.Horizontal) # 创建水平滑块
slider_horizontal.setRange(0, 100) # 设置范围
slider_horizontal.setValue(50) # 设置初始值
slider_horizontal.setSingleStep(1) # 设置步长

slider_horizontal.valueChanged.connect(lambda value: label1.setText(f"水平滑块的值: {value}"))

slider_vertical = QSlider(Qt.Vertical) # 创建垂直滑块
slider_vertical.setRange(0, 100)
slider_vertical.setValue(50)
slider_vertical.setSingleStep(1)

slider_vertical.valueChanged.connect(lambda value: label2.setText(f"垂直滑块的值: {value}"))

layout.addWidget(label1, 0, 0)
layout.addWidget(slider_horizontal, 0, 1)
layout.addWidget(label2, 1, 0)
layout.addWidget(slider_vertical, 1, 1)



if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程

9.进度条(QProgressBar)

属性和方法说明
progress_bar.value()获取进度条的值
progress_bar.setValue()设置进度条的值
progress_bar.minimum()获取进度条的最小值
progress_bar.setMaximum()设置进度条的最大值
progress_bar.setRange()设置进度条的范围
progress_bar.setFormat()设置进度条的显示格式
progress_bar.setOrientation()设置进度条的方向
progress_bar.setTextVisible()设置进度条的文本是否可见
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import sys
import random

from PySide6.QtWidgets import QApplication, QGridLayout, QLabel, QProgressBar, QPushButton, QSlider, QWidget
from PySide6.QtCore import QTimer, Qt


class MyWidget(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) # 调用父类的初始化方法
self.setWindowTitle("Cyber psychosis") # 设置窗口标题
self.resize(400, 200) # 设置窗口大小,单位为像素
self.setLayout(QGridLayout()) # 设置主窗口布局
self.setup_ui()

def setup_ui(self):
layout = self.layout()

self.label = QLabel("0%")

self.progress_bar = QProgressBar()
self.progress_bar.setRange(0, 100) # 设置进度条范围
self.progress_bar.setValue(0) # 设置进度条当前值

self.timer = QTimer() # 创建一个计时器
self.timer.timeout.connect(self.simulate_task) # 每次计时器超时时,调用update_progress方法

start_button = QPushButton("Start")
start_button.clicked.connect(self.start_task) # 点击按钮时,启动任务
reset_button = QPushButton("Reset")
reset_button.clicked.connect(self.reset_task) # 点击按钮时,重置任务

layout.addWidget(self.progress_bar, 0, 0, 1, 2)
layout.addWidget(self.label, 0, 1)
layout.addWidget(start_button, 1, 0)
layout.addWidget(reset_button, 1, 1)

def simulate_task(self):
""" 模拟任务进度 """
current_value = self.progress_bar.value()
self.label.setText(f"{current_value}%")
new_value = current_value + random.randint(1, 5)
if new_value >= 100:
self.label.setText(f"100%")
self.timer.stop() # 任务完成,停止计时器
self.progress_bar.setValue(new_value)

def start_task(self):
self.timer.start(100) # 启动计时器,每隔1000ms(1s)超时一次

def reset_task(self):
""" 重置任务进度 """
self.timer.stop() # 重置任务时,停止计时器
self.progress_bar.setValue(0)
self.label.setText("0%")


if __name__ == '__main__':
app = QApplication(sys.argv) # 创建APP,将运行脚本时(可能的)的其他参数传给Qt以初始化
widget = MyWidget() # 实例化一个MyWidget类对象
widget.show() # 显示窗口
sys.exit(app.exec()) # 正常退出APP:app.exec()关闭app,sys.exit()退出进程