PySide6(Qt for Python)作为一款功能强大的框架,为开发者提供了丰富的工具和组件,用于构建美观且实用的图形用户界面(GUI)。然而,面对众多的控件和复杂的文档,许多初学者可能会感到无从下手。本文将详细介绍 PySide6 中常用控件的用法,从基础到实战,帮助你快速掌握这些控件的使用方法。无论你是刚接触 GUI 开发的新手,还是希望进一步提升技能的开发者,本文都将为你提供实用的指导和参考。通过学习这些控件的用法,你将能够更高效地创建出功能丰富、用户体验良好的桌面应用程序。
目录
3. QTextEdit多行文本输入框,用于接受用户的多行文本输入
布局管理器
在介绍组件之前,先介绍布局管理器它是布局管理组件,用于确定窗口中的组件怎么摆放。
QHBoxLayout
是水平布局管理器,用于水平排列子组件。子组件按照从左到右的顺序水平排列。
from PySide6.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton
app = QApplication([]) # 创建QApplication实例
widget = QWidget() #创建一个窗口
widget.setGeometry(300,300,400,200) #设置窗口的位置和大小
layout = QHBoxLayout(widget) #创建一个水平布局管理器,参数widget代表把布局管理器放在widget组件中
button1=QPushButton('Button 1') #创建按钮
button2=QPushButton('Button 2') #创建按钮
layout.addWidget(button1) #将按钮组将添加布局管理器中
layout.addWidget(button2) #将按钮组将添加布局管理器中
widget.show()
app.exec()
运行效果图
QVBoxLayout
垂直布局管理器,用于垂直排列子组件按照从上到下的顺序垂直排列。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
app = QApplication([]) # 创建QApplication实例
widget = QWidget() #创建一个窗口
widget.setGeometry(300,300,400,200) #设置窗口的位置和大小
layout = QVBoxLayout(widget) #创建一个垂直布局管理器,参数widget代表把布局管理器放在widget组件中
button1=QPushButton('Button 1') #创建按钮
button2=QPushButton('Button 2') #创建按钮
layout.addWidget(button1) #将按钮组将添加布局管理器中
layout.addWidget(button2) #将按钮组将添加布局管理器中
widget.show()
app.exec()
运行效果图
QGridLayout
网格布局管理器,用于将子组件放置在一个网格中。每个子组件可以占据一个或多个网格单元。这个管理器相当于把窗口划分成多个网格,就像excel表格那样,每个格子可以放一个子组件。
from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout
from PySide6.QtCore import Qt
app = QApplication([])
#创建通用窗口
widget = QWidget()
#创建网格管理器
layout = QGridLayout(widget)
#创建三个按钮
button1 = QPushButton('Button 1')
button2 = QPushButton('Button 2')
button3 = QPushButton('Button 3')
## 在网格布局中添加按钮,第一个参数是部件,后面的参数是行和列的索引
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.addWidget(button3, 1, 0, 1, 2)
#设置组件之间的间隔
layout.setSpacing(10)
#设置组件在管理器中的对其方式
layout.setAlignment(button1, Qt.AlignVCenter | Qt.AlignHCenter)
#设置组件的拉伸因子,用于放缩窗口时,组件等比例放大或者缩小
#setColumnStretch设置列的拉伸因子
layout.setColumnStretch(1, 1)
#setRowStretch设置行的拉伸因子
layout.setRowStretch(0, 1)
# 参数解析:
# 0: 是列(行)索引,这里的 1 表示第二列(行)(列(行)索引从 0 开始)
# 1: 伸缩因子,列(行) 1 的伸缩因子设置为 1,决定了该列(行)占用多余空间的比例
widget.show()
app.exec()
可以使用以下标志位来设置对齐方式:
水平对齐标志(Qt.AlignmentFlag):
Qt.AlignLeft
:左对齐Qt.AlignRight
:右对齐Qt.AlignHCenter
:水平居中Qt.AlignJustify
:两端对齐(在水平方向上拉伸以填充网格单元)
垂直对齐标志(Qt.AlignmentFlag):
Qt.AlignTop
:顶部对齐Qt.AlignBottom
:底部对齐Qt.AlignVCenter
:垂直居中
这些标志位可以通过按位或运算来组合使用,例如 Qt.AlignTop | Qt.AlignLeft
表示左上角对齐。
效果图
QFormLayout
表单布局管理器,用于将标签和输入字段配对显示。适用于创建表单式的用户界面。
from PySide6.QtWidgets import QApplication, QWidget, QFormLayout, QLineEdit, QLabel
app = QApplication([])
widget = QWidget()
#创建表单布局管理器
layout = QFormLayout(widget)
#创建标签和单行文本框
label1 = QLabel('Name:')
line_edit1 = QLineEdit()
label2 = QLabel('Age:')
line_edit2 = QLineEdit()
#添加标签和字段对,每一对成为布局中的一行,还有相应设列的函数
layout.addRow(label1, line_edit1)
layout.addRow(label2, line_edit2)
#添加水平和垂直方向的间隔
layout.setHorizontalSpacing(15)
layout.setVerticalSpacing(10)
widget.show()
app.exec()
效果图
QStackedLayout
Qt 中的堆叠布局管理器,用于在同一位置显示多个子组件,但只显示其中一个。常用于实现选项卡式的界面或者在同一区域切换显示不同的组件。示例代码示例如下
from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QStackedLayout
app = QApplication([])
#先创建主窗口
widget = QWidget()
#创建堆叠管理器
stacked_layout = QStackedLayout(widget)
#创建一个按钮和一个标签组件
button1 = QPushButton('Page 1')
button2 = QPushButton('Page 2')
button2.setStyleSheet('QPushButton {'
'background-color: rgb(255, 0, 0);' # 默认背景颜色
'border: none;' # 去掉默认按钮的边框样式
'}'
'QPushButton:hover {'
'background-color: rgb(255, 0, 0);' # 鼠标悬停时的背景颜色
'}')
#把两个组件添加到管理器中
stacked_layout.addWidget(button1)
stacked_layout.addWidget(button2)
#设置初始显示索引为0的组件(Page 1)
stacked_layout.setCurrentIndex(0)
#给按钮添加点击事件,切换显示不同的部件,当点击按钮时切换显示第二个组件
button1.clicked.connect(lambda: stacked_layout.setCurrentIndex(1))
button2.clicked.connect(lambda: stacked_layout.setCurrentIndex(0))
widget.show()
app.exec()
效果展示
常用控件
1. QLabel标签和QLineEdit单行文本框
QLabel用于显示文本或图像的标签。QLineEdit用于单行文本输入框,用于接受用户的文本输入
QLabel的用法
from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget
app = QApplication([])
widget = QWidget()
# 设置窗口的大小和位置
widget.setGeometry(100, 100, 300, 200)
# 参数依次为 x 坐标、y 坐标、宽度、高度
# 创建垂直布局管理器
layout = QVBoxLayout(widget)
# 创建一个QLabel,显示中文文本
label1 = QLabel('用户名')
label2 = QLabel('密码')
# 将QLabel添加到布局中
layout.addWidget(label1)
layout.addWidget(label2)
widget.show() # 显示窗口
app.exec() # 进入应用程序的事件循环
QLabel控件是用于显示的控件,当我们需要接受用户输入的内容时就需要用到QLineEdit
from PySide6.QtWidgets import QApplication, QLabel, QVBoxLayout, QWidget, QLineEdit, QGridLayout
app = QApplication([])
widget = QWidget()
# 设置窗口的大小和位置
widget.setGeometry(100, 100, 300, 200)
# 参数依次为 x 坐标、y 坐标、宽度、高度
#创建网格管理器
layout = QGridLayout(widget)
# 创建两个QLabel,显示中文文本
label1 = QLabel('用户名')
label2 = QLabel('密码')
# 创建两个QLineEdit,显示中文文本
line_edit2 = QLineEdit()
line_edit1 = QLineEdit()
# 将QLabel添加到布局中
layout.addWidget(label1,0,0)
layout.addWidget(label2,1,0)
# 将QLineEdit添加到布局中
layout.addWidget(line_edit1,0,1)
layout.addWidget(line_edit2,1,1)
widget.show() # 显示窗口
app.exec() # 进入应用程序的事件循环
效果图
QLabel常用的属性在表格中展示
alignment:标签内容的对齐方式 | 可以使用 setAlignment()方法设置。对齐方式可以是左对齐、右对齐、居中 |
indent:标签文本的缩进(以像素为单位) | 可以使用 setIndent()方法设置 |
margin:标签内容周围边距的宽度 | 可以使用 setMargin()方法设置 |
pixmap:标签显示的图片 | 可以使用 setPixmap()方法设置 |
text:标签的文本内容 | 可以使用 setText()方法设置 |
textFormat:标签的文本格式 | 可以使用 setTextFormat()方法设置 |
wordWrap:布尔属性,指示标签的自动换行策略 | 可以使用 setWordWrap()方法设置。如果启用自动换行,文本将根据标签的宽度自动换行显示。 |
注意:当同时设置了文本和图片,会优先显示图片,而非文本。此外当你开启自动换行时,在你放大缩小窗口时,标签内容会换行。
QLineEdit的用法
创建QLineEdit方法
line_edit = QLineEdit()
它的用法有以下几种
- text:获取或设置 QLineEdit 中的文本内容。
line_edit.text() #获取文本框的内容
line_edit.setText("Text") # 设置文本框的内容
一般使用QLineEdit是为了输入内容,并不会直接设置文本,setText不常用。
- placeholderText:设置占位符文本,该文本在用户未输入任何内容时显示在 QLineEdit 中
line_edit.setPlaceholderText("请输入密码")
- maxLength:限制用户输入的最大字符数
line_edit.setMaxLength(10)
- readOnly:设置为 True 可以将 QLineEdit 设置为只读模式,用户无法编辑其中的文本
line_edit.setReadOnly(True)
- alignment:设置文本在 QLineEdit 中的对齐方式
line_edit.setAlignment(QtCore.Qt.AlignRight)
- echoMode:设置文本的显示方式,可以是正常显示、密码显示等
line_edit.setEchoMode(QLineEdit.Password)
- inputMask:设置输入掩码,限制用户输入的格式
line_edit.setInputMask("000-00-00")
- clearButtonEnabled:启用或禁用清除按钮,允许用户一键清空输入内容该功能启用以后,在文本框有一个打叉的标志,可以直接清除数据。
line_edit.setClearButtonEnabled(True)
2. QPushButton按钮
QPushButton
是 PyQt 中用于创建按钮的类。按钮是常见的 GUI 控件,用户可以点击按钮以触发程序中的某些操作。
以下是 QPushButton
的详细介绍:
基本作用和功能
-
显示按钮:用于显示可点击的按钮。
-
触发事件:当按钮被点击时,可以触发特定的事件或函数。
-
显示文本或图标:按钮可以显示纯文本或图标。
-
设置样式:可以通过样式表(
QSS
)或内置方法自定义按钮的外观。 -
禁用按钮:可以设置按钮为禁用状态,此时按钮不可点击。
常见属性和方法
-
创建按钮
button = QPushButton("Button Text", parent=None)
-
设置和获取按钮文本
button.setText("New Text") # 设置按钮文本 text = button.text() # 获取按钮文本
-
设置和获取按钮图标
from PyQt5.QtGui import QIcon icon = QIcon("icon.png") # 加载图标 button.setIcon(icon) # 设置按钮图标 icon = button.icon() # 获取按钮图标
-
禁用和启用按钮
button.setDisabled(True) # 禁用按钮 button.setEnabled(False) # 等同于 setDisabled(True) button.setEnabled(True) # 启用按钮
-
设置固定大小
button.setFixedSize(100, 30) # 设置固定宽度和高度 button.setMaximumSize(200, 50) # 设置最大宽度和高度 button.setMinimumSize(50, 20) # 设置最小宽度和高度
-
设置样式表
通过
setStyleSheet
方法可以设置按钮的样式,更多样式设置可参考PySide6的QSS 样式button.setStyleSheet( "QPushButton {" "background-color: rgb(255, 0, 0);" "color: white;" "border: none;" "}" )
-
设置按钮的快捷键
button.setShortcut('Ctrl+C')
-
setAutoRepeat
方法#启用按钮的自动重复功能 button.setAutoRepeat(True) #设置按钮的自动重复间隔(毫秒) button.setAutoRepeatInterval(500) #etAutoRepeat 方法用于启用或禁用按钮的自动重复功能。自动重复是指当用户按住按钮时,按钮会自动多次触发点击事件
常见信号和槽
-
clicked
信号:当按钮被点击时触发。button.clicked.connect(self.on_button_clicked)
-
pressed
信号:当按钮被按下时触发。button.pressed.connect(self.on_button_pressed)
-
released
信号:当按钮被释放时触发。button.released.connect(self.on_button_released)
示例代码
以下是一个简单的示例,展示如何创建一个按钮并连接点击事件:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
class Example(QWidget):
def __init__(self):
super().__init__()
self.init_ui()
def init_ui(self):
# 创建按钮
button = QPushButton("Click Me", self)
button.setFixedSize(100, 30) # 设置按钮大小
button.setStyleSheet("background-color: blue; color: white;") # 设置样式
# 连接点击事件
button.clicked.connect(self.on_button_clicked)
# 设置布局
layout = QVBoxLayout()
layout.addWidget(button)
self.setLayout(layout)
self.setWindowTitle("QPushButton Example")
self.resize(300, 200)
def on_button_clicked(self):
print("Button was clicked!")
if __name__ == "__main__":
app = QApplication([])
example = Example()
example.show()
app.exec_()
3. QTextEdit多行文本输入框,用于接受用户的多行文本输入
QTextEdit
是 PyQt 中用于显示和编辑多行文本的控件。它支持丰富的文本格式,如富文本(HTML 格式)、纯文本等,并且提供了滚动条、鼠标选中、剪贴板操作等功能。
以下是 QTextEdit
的详细介绍:
基本作用和功能
-
显示多行文本:可用于显示长文本内容,自动处理换行和滚动。
-
编辑文本:支持用户输入、编辑多行文本。
-
富文本支持:可以显示和编辑带格式的富文本(HTML 格式)。
-
只读模式:可以通过设置只读属性,将
QTextEdit
设置为只读模式,用于显示文本。 -
鼠标选中:支持用户通过鼠标选中文本内容。
-
剪贴板操作:支持复制、剪切、粘贴等操作。
常见方法和功能
初始化
text_edit = QTextEdit(parent)
1. 显示纯文本
text_edit.setPlainText("Hello, World!")
text_edit.toPlainText() # 获取纯文本
2. 显示富文本(HTML 格式)
text_edit.setHtml("<b>Hello</b>, <i>World</i>!")
text_edit.toHtml() # 获取 HTML 格式的文本
3. 设置只读模式
text_edit.setReadOnly(True) # 设置为只读
text_edit.isReadOnly() # 检查是否为只读模式
4. 获取和设置文本内容
-
插入文本:
text_edit.insertPlainText("Insert some text here.")
-
设置对齐方式:
text_edit.setAlignment(Qt.AlignCenter) # 居中对齐
5. 选中文本
text_edit.selectAll() # 选中所有文本
6. 剪切、复制、粘贴
text_edit.cut() # 剪切选中的文本
text_edit.copy() # 复制选中的文本
text_edit.paste() # 粘贴文本
7. 滚动条控制
-
滚动到指定位置:
text_edit.ensureCursorVisible() # 确保光标可见
8. 拖放功能
QTextEdit
默认支持拖放操作。可以通过以下方法启用或禁用拖放功能:
text_edit.setAcceptDrops(True) # 启用拖放功能
9. 文字格式设置
可以用样式表(setStyleSheet
)来设置文字的字体、颜色等格式。例如:
text_edit.setStyleSheet("""
QTextEdit {
font-family: Arial;
font-size: 14px;
color: blue;
background-color: white;
}
""")
示例代码
以下是完整的 QTextEdit
示例代码:
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建 QTextEdit 控件
self.text_edit = QTextEdit(self)
self.text_edit.setPlainText("Hello, PyQt!") # 设置纯文本
self.text_edit.setReadOnly(False) # 设置可编辑
self.text_edit.setStyleSheet("""
QTextEdit {
font-family: Arial;
font-size: 14px;
color: blue;
background-color: white;
}
""")
# 设置主窗口布局
layout = QVBoxLayout()
layout.addWidget(self.text_edit)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
self.setWindowTitle("QTextEdit Example")
self.resize(400, 300)
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
QTextEdit
是 PyQt 中功能强大的文本编辑控件,适用于需要显示和编辑多行文本的场景。它支持富文本格式,提供了丰富的文本处理功能,如只读模式、选中文本、剪贴板操作等,可以通过样式表和 API 方法灵活地控制其外观和行为。
4. QComboBox下拉框
- 创建QComboBox,并添加下拉选项
import sys
from PySide6.QtWidgets import QApplication, QLabel, QComboBox, QVBoxLayout, QWidget
app = QApplication(sys.argv)
# 创建主窗口
window = QWidget()
#设置窗口标题
window.setWindowTitle("简单的QComboBox例子")
window.setGeometry(100,100,200,200)
# 创建布局
layout = QVBoxLayout()
#创建标签
label = QLabel("选择一个项:")
#创建下拉框
combo_box = QComboBox()
#向下拉框添加选项
combo_box.addItem("选项1")
combo_box.addItem("选项2")
combo_box.addItem("选项3")
#将标签和下拉框添加到布局
layout.addWidget(label)
layout.addWidget(combo_box)
#将布局设置为主窗口的布局
window.setLayout(layout)
#定义下拉框选择变化时的槽函数
def on_combobox_changed(index):
selected_text = combo_box.currentText()
label.setText(f"选择的项是:{selected_text}")
#将下拉框的选择改变事件连接到槽函数
combo_box.currentIndexChanged.connect(on_combobox_changed)
#显示主窗口
window.show()
sys.exit(app.exec_())
这里面有两个关键点
combo_box.addItem("")
是用来添加选项的。与按钮相同的是下拉列表框也能绑定触发函数,当你选择某一个选项时,会执行一个函数。
combo_box.currentIndexChanged.connect(on_combobox_changed)
on_combobox_changed是你自己定义的函数名。在上面的示例中,函数
def on_combobox_changed(index):
selected_text = combo_box.currentText()
label.setText(f"选择的项是:{selected_text}")
便是触发函数,combo_box.currentText()是获取当前的选择的选项,然后用标签进行显示。
这个组件有以下常用的核心函数:
- addItem()
作用:向下拉框中添加一个文本项。
示例:comboBox.addItem("选项1")
- addItems()
作用:向下拉框中添加多个文本项。
示例:comboBox.addItems(["选项1", "选项2", "选项3"])
- clear()
作用:清除下拉框中的所有项。
示例:comboBox.clear()
- currentText()
作用:获取当前选中项的文本。
示例:selected_text = comboBox.currentText()
- currentIndex()
作用:获取当前选中项的索引。
示例:selected_index = comboBox.currentIndex()
- setCurrentIndex(int)
作用:设置当前选中项的索引。
示例:comboBox.setCurrentIndex(1)
- currentIndexChanged.connect(slot_function)
作用:连接选择改变事件到槽函数。
示例:comboBox.currentIndexChanged.connect(on_combobox_changed)
- activated.connect(slot_function)
作用:连接激活事件到槽函数。激活事件在用户选择项并按下回车键时触发。
示例:comboBox.activated.connect(on_combobox_activated)
- count()
作用:获取下拉框中的项数。
示例:item_count = comboBox.count()
- insertItem(index: int, text: str)
作用:在指定索引位置插入一个文本项。
示例:comboBox.insertItem(2, "插入项")
上面的槽函数和笔者说的触发函数是一个意思,从英文直翻译过叫槽函数。
5. QCheckBox
创建复选框QCheckBox:
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox
app = QApplication([])
widget = QWidget()
widget.setWindowTitle('QCheckBox Example')
# 创建一个复选框
checkbox = QCheckBox('Enable Feature', widget)
# 将复选框添加到布局
layout = QVBoxLayout(widget)
layout.addWidget(checkbox)
# 设置布局
widget.setLayout(layout)
widget.setGeometry(100, 100, 300, 200)
widget.show()
app.exec()
isChecked():返回一个布尔值,表示复选框的当前状态是否被选中
checked = checkbox.isChecked()
setChecked(checked):设置复选框的选中状态
checkbox.setChecked(True) # 选中
checkbox.setChecked(False) # 取消选中
stateChanged:槽函数,与按钮的触发函数类似。当复选框的状态发生变化时触发。可以连接到一个槽函数来处理状态变化
checkbox.stateChanged.connect(my_function)
my_function用你自己定义的函数名代替
text:复选框显示的文本
label_text = checkbox.text()
isChecked:读写属性,表示复选框的当前状态。可以用于获取或设置复选框是否被选中
checkbox.setChecked(True) # 设置为选中状态
checked_state = checkbox.isChecked() # 获取当前选中状态
6. QRadioButton
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QRadioButton
def myprint():
print('Radio Button 1 Toggled')
app = QApplication([])
widget = QWidget()
widget.setWindowTitle('QRadioButton Example')
widget.setGeometry(100, 100, 300, 200)
# 创建两个单选按钮
radio_button1 = QRadioButton('Option 1', widget)
radio_button2 = QRadioButton('Option 2', widget)
# 设置一个按钮为选中状态
radio_button1.setChecked(True)
# 读取属性
print('Radio Button 1 text:', radio_button1.text())
print('Is Radio Button 1 Checked:', radio_button1.isChecked())
# 连接信号
radio_button1.toggled.connect(myprint)
# 将单选按钮添加到布局
layout = QVBoxLayout(widget)
layout.addWidget(radio_button1)
layout.addWidget(radio_button2)
# 设置布局
widget.setLayout(layout)
widget.show()
app.exec()
text:单选按钮显示的文本
radio_button.text()
isChecked:读写属性,表示单选按钮的当前状态。可以用于获取或设置单选按钮是否被选中
radio_button.setChecked(True) # 设置为选中状态
checked_state = radio_button.isChecked() # 获取当前选中状态
toggled:信号,当单选按钮的状态发生变化时触发。可以连接到一个槽函数来处理状态变化
radio_button.toggled.connect(my_function)
QRadioButton
是一种单选按钮,同一个父级下的 QRadioButton
会被分组在一起,而且它们之间是互斥的,用户只能选择其中的一个。这种行为是通过将它们添加到同一个父级部件(通常是同一个布局或窗口)来实现的。
7. QSpinBox
和 QDoubleSpinBox
是 Qt 中用于输入整数和浮点数的部件,它们允许用户通过按钮、键盘或手动输入来选择数值。以下是它们的简单用法:
from PySide6.QtWidgets import QApplication, QSpinBox, QVBoxLayout, QWidget
app = QApplication([])
widget = QWidget()
layout = QVBoxLayout(widget)
spinbox = QSpinBox()
spinbox.setRange(0, 100) # 设置数值范围
spinbox.setSingleStep(1) # 设置步长
spinbox.setValue(50) # 设置初始值
layout.addWidget(spinbox)
widget.show()
app.exec()
from PySide6.QtWidgets import QApplication, QDoubleSpinBox, QVBoxLayout, QWidget
app = QApplication([])
widget = QWidget()
layout = QVBoxLayout(widget)
doublespinbox = QDoubleSpinBox()
doublespinbox.setRange(0.0, 100.0) # 设置数值范围
doublespinbox.setSingleStep(0.1) # 设置步长
doublespinbox.setValue(50.0) # 设置初始值
layout.addWidget(doublespinbox)
widget.show()
app.exec()
这两个部件的用法非常类似,它们都有以下常见的属性和方法:
setRange(min, max)
: 设置数值范围。setSingleStep(step)
: 设置步长。setValue(value)
: 设置初始值。value()
: 获取当前的值。valueChanged.connect(slot)
: 连接值变化的信号。
8. QSlider
QSlider
是 Qt 中用于选择范围值的部件,通常用于允许用户通过拖动滑块来选择数值。
from PySide6.QtWidgets import QApplication, QSlider, QVBoxLayout, QWidget, QLabel
from PySide6.QtCore import Qt
app = QApplication([])
widget = QWidget()
layout = QVBoxLayout(widget)
# 创建一个水平滑块
slider_horizontal = QSlider(Qt.Horizontal)
slider_horizontal.setRange(0, 100) # 设置范围
slider_horizontal.setValue(50) # 设置初始值
slider_horizontal.setSingleStep(1) # 设置步长
# 创建一个垂直滑块
slider_vertical = QSlider(Qt.Vertical)
slider_vertical.setRange(0, 100)
slider_vertical.setValue(50)
slider_vertical.setSingleStep(1)
# 显示当前值的标签
label_horizontal = QLabel("Horizontal Slider Value: ")
label_vertical = QLabel("Vertical Slider Value: ")
# 连接滑块数值改变的信号到更新标签的槽
slider_horizontal.valueChanged.connect(lambda value: label_horizontal.setText(f"Horizontal Slider Value: {value}"))
slider_vertical.valueChanged.connect(lambda value: label_vertical.setText(f"Vertical Slider Value: {value}"))
# 将部件添加到布局
layout.addWidget(slider_horizontal)
layout.addWidget(label_horizontal)
layout.addWidget(slider_vertical)
layout.addWidget(label_vertical)
widget.show()
app.exec()
关键的 QSlider
方法和属性包括:
setRange(min, max)
: 设置滑块的范围。setValue(value)
: 设置滑块的当前值。setSingleStep(step)
: 设置每次单步增减的数值。value()
: 获取当前的滑块值。valueChanged.connect(slot)
: 连接数值变化的信号。
9. QProgressBar
QProgressBar
是 PySide6 中用于显示进度条的控件,可以用来向用户展示某个操作的进度。以下是 QProgressBar
的详细解析:
基本功能
-
显示进度:通过设置最小值、最大值和当前值,进度条会根据这些值显示相应的进度。
-
支持水平和垂直方向:可以通过设置方向属性来决定进度条是水平还是垂直显示。
-
自定义样式:可以通过样式表(
setStyleSheet
)自定义进度条的外观。 -
显示文本:可以设置进度条显示当前进度的文本(如百分比)。
核心属性和方法
1. 设置范围
-
setRange(minimum, maximum)
:-
设置进度条的最小值和最大值。
-
示例:
progress_bar.setRange(0, 100) # 设置范围为 0 到 100
-
-
setMinimum(minimum)
和setMaximum(maximum)
:-
分别设置最小值和最大值。
-
2. 设置当前值
-
setValue(value)
:-
设置进度条的当前值。
-
示例:
progress_bar.setValue(50) # 设置当前值为 50
-
-
value()
:-
获取当前值。
-
3. 重置进度条
-
reset()
:-
重置进度条,使其回到初始状态(无进度显示)。
-
4. 设置方向
-
setOrientation(Qt::Horizontal)
或setOrientation(Qt::Vertical)
:-
设置进度条的方向为水平或垂直。
-
默认是水平方向。
-
5. 设置文本显示
-
setFormat(format_string)
:-
设置进度条显示的文本格式。
-
常用占位符:
-
%p
:显示百分比。 -
%v
:显示当前值。 -
%m
:显示最大值。
-
-
示例:
progress_bar.setFormat(f"Progress: %p%") # 显示百分比
-
-
text()
:-
获取当前显示的文本。
-
6. 设置对齐方式
-
setAlignment(alignment)
:-
设置文本的对齐方式,例如
Qt.AlignCenter
。
-
7. 设置反转外观
-
setInvertedAppearance(inverted)
:-
如果设置为
True
,进度条会从右到左(或从下到上)增长。 -
默认值为
False
。
-
8. 设置样式
-
setStyleSheet(style_sheet)
:-
使用样式表自定义进度条的外观。
-
示例:
progress_bar.setStyleSheet("QProgressBar { border: 2px solid grey; border-radius: 5px; background: white; text-align: center; }")
-
信号
-
valueChanged(int value)
:-
当进度条的值发生变化时发出信号,参数为新的值。
-
示例代码
水平进度条
from PySide6.QtWidgets import QApplication, QProgressBar, QVBoxLayout, QWidget
from PySide6.QtCore import Qt
app = QApplication([])
# 创建窗口
window = QWidget()
layout = QVBoxLayout()
# 创建进度条
progress_bar = QProgressBar()
progress_bar.setRange(0, 100) # 设置范围
progress_bar.setValue(50) # 设置当前值
progress_bar.setFormat(f"Progress: %p%") # 设置文本格式
progress_bar.setAlignment(Qt.AlignCenter) # 设置文本对齐方式
layout.addWidget(progress_bar)
window.setLayout(layout)
window.show()
app.exec()
垂直进度条
from PySide6.QtWidgets import QApplication, QProgressBar, QVBoxLayout, QWidget
from PySide6.QtCore import Qt
app = QApplication([])
# 创建窗口
window = QWidget()
layout = QVBoxLayout()
# 创建垂直进度条
progress_bar = QProgressBar()
progress_bar.setOrientation(Qt.Vertical) # 设置为垂直方向
progress_bar.setRange(0, 100)
progress_bar.setValue(75)
progress_bar.setFormat(f"Progress: %p%")
layout.addWidget(progress_bar)
window.setLayout(layout)
window.show()
app.exec()
未确定状态
如果将进度条的最小值和最大值都设置为 0(setRange(0, 0)
),进度条会进入“未确定状态”,显示为一个“忙碌指示器”,表示操作正在进行但无法确定具体进度。这种状态通常用于无法预知完成时间的任务,例如文件下载或网络请求。
10. QListWidget
QListWidget
是 Qt 中用于显示列表的部件,它允许用户显示和选择项目
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QListWidget, QPushButton, QLineEdit, QListWidgetItem
class ListWidgetExample(QWidget):
def __init__(self):
super().__init__()
# 创建主布局和子部件
self.layout = QVBoxLayout(self)
self.list_widget = QListWidget()
self.add_button = QPushButton("Add Item")
self.remove_button = QPushButton("Remove Selected Item")
self.clear_button = QPushButton("Clear All")
self.input_text = QLineEdit()
# 设置输入框的提示文本
self.input_text.setPlaceholderText("Enter text to add")
# 将子部件添加到主布局
self.layout.addWidget(self.list_widget)
self.layout.addWidget(self.input_text)
self.layout.addWidget(self.add_button)
self.layout.addWidget(self.remove_button)
self.layout.addWidget(self.clear_button)
# 连接按钮的点击信号到槽函数
self.add_button.clicked.connect(self.add_item)
self.remove_button.clicked.connect(self.remove_selected_item)
self.clear_button.clicked.connect(self.clear_all)
# 连接列表项的点击信号到槽函数
self.list_widget.itemClicked.connect(self.item_clicked)
def add_item(self):
# 从输入框获取文本
text = self.input_text.text()
if text:
# 创建一个 QListWidgetItem 并设置文本
item = QListWidgetItem(text)
# 将项目添加到列表
self.list_widget.addItem(item)
# 清空输入框
self.input_text.clear()
def remove_selected_item(self):
# 获取当前选中的项目
selected_item = self.list_widget.currentItem()
if selected_item:
# 移除选中的项目
self.list_widget.takeItem(self.list_widget.row(selected_item))
def clear_all(self):
# 移除所有项目
self.list_widget.clear()
def item_clicked(self, item):
# 处理项目点击事件
print(f"Clicked on item: {item.text()}")
if __name__ == "__main__":
app = QApplication([])
example = ListWidgetExample()
example.show()
app.exec()
这个示例创建了一个简单的界面,其中包含一个列表部件(QListWidget
)、一个输入框(QLineEdit
)和三个按钮(QPushButton
)。用户可以输入文本,点击"Add Item"按钮将文本添加到列表,选择列表项并点击"Remove Selected Item"按钮将移除选中的项目,点击"Clear All"按钮将清空整个列表。同时,点击列表项会触发一个信号,并在控制台输出相应的信息。
关键的 QListWidget
方法和属性包括:
addItem(item)
: 将项目添加到列表。insertItem(index, item)
: 在指定位置插入项目。takeItem(index)
: 从列表中移除指定位置的项目。clear()
: 移除所有项目。count()
: 返回列表中的项目数。currentItem()
: 返回当前选中的项目。setCurrentItem(item)
: 设置当前选中的项目。item(index)
: 返回指定位置的项目。itemAt(x, y)
: 返回给定坐标处的项目。selectedItems()
: 返回当前选中的所有项目。setSelectionMode(mode)
: 设置选择模式。
11.QTreeWidget
QTreeWidget
是 PySide6(Qt for Python)中用于显示树形结构数据的控件,常用于展示层级关系(如文件目录、组织结构等)。以下是 QTreeWidget
的详细解析:
基本功能
-
显示树形结构:
-
QTreeWidget
可以显示多级层次结构的数据,每一级称为一个节点。 -
节点可以展开或折叠,方便用户查看层级关系。
-
-
支持多列显示:
-
可以设置多个列,每个节点在不同列中显示不同的内容。
-
-
支持节点操作:
-
添加、删除、移动节点。
-
设置节点的文本、图标、复选框等。
-
-
支持排序和筛选:
-
可以启用排序功能,用户可以通过点击列标题对节点进行排序。
-
支持隐藏列或调整列宽。
-
-
信号支持:
-
提供多种信号,如节点选中变化、双击事件、右键菜单等。
-
核心属性和方法
1. 设置列数和列标题
-
setColumnCount(count)
:-
设置树形控件的列数。
-
示例:
tree_widget.setColumnCount(2) # 设置两列
-
-
setHeaderLabels(labels)
:-
设置列标题。
-
示例:
tree_widget.setHeaderLabels(["名称", "类型"]) # 设置两列标题
-
2. 添加节点
-
addTopLevelItem(item)
:-
添加顶层节点。
-
示例:
root_item = QTreeWidgetItem(tree_widget) root_item.setText(0, "根节点")
-
-
addTopLevelItems(items)
:-
添加多个顶层节点。
-
-
insertTopLevelItem(index, item)
:-
在指定位置插入顶层节点。
-
-
insertTopLevelItems(index, items)
:-
在指定位置插入多个顶层节点。
-
3. 添加子节点
-
addChild(child)
:-
为指定节点添加子节点。
-
示例:
child_item = QTreeWidgetItem(root_item) child_item.setText(0, "子节点")
-
4. 展开和折叠节点
-
expandItem(item)
:-
展开指定节点。
-
示例:
tree_widget.expandItem(root_item)
-
-
collapseItem(item)
:-
折叠指定节点。
-
-
expandAll()
:-
展开所有节点。
-
-
collapseAll()
:-
折叠所有节点。
-
5. 设置节点属性
-
setIcon(column, icon)
:-
为指定列设置图标。
-
示例:
root_item.setIcon(0, QIcon(":/icons/root.png"))
-
-
setCheckState(column, state)
:-
为指定列设置复选框状态。
-
示例:
child_item.setCheckState(0, Qt.Checked)
-
-
setData(column, role, value)
:-
存储自定义数据。
-
示例:
child_item.setData(0, Qt.UserRole, QVariant(123))
-
-
data(column, role)
:-
获取节点的自定义数据。
-
6. 排序功能
-
setSortingEnabled(enabled)
:-
启用或禁用排序功能。
-
示例:
tree_widget.setSortingEnabled(True)
-
-
sortByColumn(column, order)
:-
按指定列和顺序排序。
-
示例:
tree_widget.sortByColumn(0, Qt.AscendingOrder)
-
7. 信号
-
itemSelectionChanged
:-
当选中项发生变化时发出信号。
-
示例:
tree_widget.itemSelectionChanged.connect(lambda: print("Selection changed"))
-
-
itemDoubleClicked(item, column)
:-
当节点被双击时发出信号。
-
示例:
tree_widget.itemDoubleClicked.connect(lambda item, column: print(f"Double clicked: {item.text(column)}"))
-
-
itemClicked(item, column)
:-
当节点被单击时发出信号。
-
-
itemChanged(item, column)
:-
当节点内容发生变化时发出信号。
-
高级操作
1. 遍历节点
可以使用 QTreeWidgetItemIterator
遍历所有节点:
from PySide6.QtWidgets import QTreeWidgetItemIterator
iterator = QTreeWidgetItemIterator(tree_widget)
while iterator.value():
item = iterator.value()
print(item.text(0))
iterator += 1
2. 上下文菜单
可以通过设置右键菜单来实现更多功能:
tree_widget.setContextMenuPolicy(Qt.CustomContextMenu)
tree_widget.customContextMenuRequested.connect(lambda pos: print("Context menu requested"))
3. 性能优化
当数据量较大时,可以使用以下方法优化性能:
-
setUniformRowHeights(True)
:-
提升渲染性能。
-
-
批量操作时禁用更新:
-
在批量添加或删除节点时,调用
tree_widget.setUpdatesEnabled(False)
禁用更新,操作完成后再调用tree_widget.setUpdatesEnabled(True)
恢复更新。
-
-
使用 Model/View 模式:
-
对于大数据量,推荐使用
QTreeView
配合模型(如QFileSystemModel
)。
-
完整示例
以下是一个完整的 QTreeWidget
示例,展示如何创建树形控件并添加节点:
from PySide6.QtWidgets import QApplication, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget
from PySide6.QtCore import Qt
app = QApplication([])
# 创建窗口
window = QWidget()
layout = QVBoxLayout()
# 创建树形控件
tree_widget = QTreeWidget()
tree_widget.setColumnCount(2)
tree_widget.setHeaderLabels(["名称", "类型"])
# 添加顶层节点
root_item = QTreeWidgetItem(tree_widget)
root_item.setText(0, "根节点")
root_item.setText(1, "文件夹")
# 添加子节点
child_item = QTreeWidgetItem(root_item)
child_item.setText(0, "子节点")
child_item.setText(1, "文件")
# 展开所有节点
tree_widget.expandAll()
layout.addWidget(tree_widget)
window.setLayout(layout)
window.show()
app.exec()
注意事项
-
内存管理:
-
QTreeWidgetItem
需要手动删除或设置父对象自动管理。
-
-
大数据量:
-
对于大数据量,推荐使用
QTreeView
配合模型(如QFileSystemModel
)。
-
-
节点行为:
-
可以通过
setFlags()
控制节点行为(如可编辑、可选中等)。
-
通过合理使用 QTreeWidget
的功能,可以创建功能丰富的树形界面组件,适用于配置界面、文件浏览器、数据导航等多种场景。
12.QTabWidget
选项卡窗口,用于将内容分组到多个选项卡页中。
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QTabWidget, QLabel, QTextEdit
class TabWidgetExample(QWidget):
def __init__(self):
super().__init__()
# 创建主布局和子部件
self.layout = QVBoxLayout(self)
self.tab_widget = QTabWidget()
# 创建两个选项卡
tab1 = QWidget()
tab2 = QWidget()
# 在每个选项卡中添加不同的子部件
label_tab1 = QLabel("This is Tab 1")
text_edit_tab2 = QTextEdit()
# 将子部件添加到相应的选项卡
tab1_layout = QVBoxLayout(tab1)
tab1_layout.addWidget(label_tab1)
tab2_layout = QVBoxLayout(tab2)
tab2_layout.addWidget(text_edit_tab2)
# 将选项卡添加到 QTabWidget
self.tab_widget.addTab(tab1, "Tab 1")
self.tab_widget.addTab(tab2, "Tab 2")
# 将 QTabWidget 添加到主布局
self.layout.addWidget(self.tab_widget)
if __name__ == "__main__":
app = QApplication([])
example = TabWidgetExample()
example.show()
app.exec()
关键的 QTabWidget
方法和属性包括:
addTab(widget, label)
: 向QTabWidget
添加一个选项卡,参数为选项卡中的子部件和选项卡的标签。removeTab(index)
: 移除指定索引的选项卡。setCurrentIndex(index)
: 设置当前显示的选项卡。currentIndex()
: 获取当前显示的选项卡的索引。
13.QFileDialog
QFileDialog
是 Qt 中用于显示文件对话框的部件,允许用户选择文件或目录。
from PySide6.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QFileDialog
class FileDialogExample(QWidget):
def __init__(self):
super().__init__()
# 创建主布局和子部件
self.layout = QVBoxLayout(self)
self.open_button = QPushButton("Open File Dialog")
# 将子部件添加到主布局
self.layout.addWidget(self.open_button)
# 连接按钮的点击信号到槽函数
self.open_button.clicked.connect(self.show_file_dialog)
def show_file_dialog(self):
# 创建文件对话框
file_dialog = QFileDialog(self)
# 设置文件对话框的标题
file_dialog.setWindowTitle("Choose a File")
# 设置对话框模式为打开文件
file_dialog.setFileMode(QFileDialog.ExistingFile)
# 显示文件对话框,并获取用户选择的文件路径
selected_file, _ = file_dialog.getOpenFileName(self, "Open File", "", "All Files (*);;Text Files (*.txt)")
# 如果用户选择了文件,将文件路径输出到控制台
if selected_file:
print(f"Selected file: {selected_file}")
if __name__ == "__main__":
app = QApplication([])
example = FileDialogExample()
example.show()
app.exec()
在这个例子中,我们创建了一个按钮,点击按钮将弹出文件对话框,并在控制台输出用户选择的文件路径。可以通过 setFileMode
方法设置对话框的模式,例如 QFileDialog.ExistingFile
表示打开一个已存在的文件。
关键的 QFileDialog
方法和属性包括:
getOpenFileName(parent, caption, directory, filter)
: 打开文件对话框,返回用户选择的文件路径和文件过滤器。getOpenFileNames(parent, caption, directory, filter)
: 打开文件对话框,允许用户选择多个文件,返回文件路径列表和文件过滤器。getExistingDirectory(parent, caption, directory)
: 打开目录对话框,返回用户选择的目录路径。getSaveFileName(parent, caption, directory, filter)
: 打开保存文件对话框,返回用户选择的文件路径和文件过滤器。
14.QToolBar
QToolBar
是 Qt 中用于创建工具栏的部件,它通常用于放置常用的工具按钮、操作和其他小部件
from PySide6.QtWidgets import QApplication, QMainWindow, QToolBar
from PySide6.QtGui import QAction
class ToolbarExample(QMainWindow):
def __init__(self):
super().__init__()
# 创建主窗口和布局
self.setWindowTitle("Toolbar Example")
# 创建工具栏
self.toolbar = QToolBar("Main Toolbar")
# 添加工具按钮到工具栏
action_open = QAction("Open", self)
action_save = QAction("Save", self)
action_cut = QAction("Cut", self)
action_copy = QAction("Copy", self)
action_paste = QAction("Paste", self)
self.toolbar.addAction(action_open)
self.toolbar.addAction(action_save)
self.toolbar.addSeparator() # 添加分隔符
self.toolbar.addAction(action_cut)
self.toolbar.addAction(action_copy)
self.toolbar.addAction(action_paste)
# 将工具栏添加到主窗口
self.addToolBar(self.toolbar)
if __name__ == "__main__":
app = QApplication([])
example = ToolbarExample()
example.show()
app.exec()
关键的 QToolBar
方法和属性包括:
addAction(action)
: 向工具栏添加一个操作按钮。addSeparator()
: 向工具栏添加一个分隔符。addWidget(widget)
: 向工具栏添加自定义的小部件。setIconSize(size)
: 设置工具栏上图标的大小。setToolButtonStyle(style)
: 设置工具栏按钮的样式,如图标在文字上方、下方、只显示图标等。
16.QMessageBox
消息框,用于显示提示、警告和错误消息。
from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton, QVBoxLayout, QWidget, QMessageBox
class MessageBoxExample(QMainWindow):
def __init__(self):
super().__init__()
# 创建主窗口和布局
self.setWindowTitle("MessageBox Example")
# 创建按钮
self.show_info_button = QPushButton("Show Info Message")
self.show_warning_button = QPushButton("Show Warning Message")
self.ask_question_button = QPushButton("Ask Question")
# 创建垂直布局
layout = QVBoxLayout()
# 将按钮添加到布局
layout.addWidget(self.show_info_button)
layout.addWidget(self.show_warning_button)
layout.addWidget(self.ask_question_button)
# 将布局设置为主窗口的中央部分
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
# 连接按钮的点击信号到槽函数
self.show_info_button.clicked.connect(self.show_info_message)
self.show_warning_button.clicked.connect(self.show_warning_message)
self.ask_question_button.clicked.connect(self.ask_question)
def show_info_message(self):
# 创建信息消息框
QMessageBox.information(self, "Info", "This is an information message.")
def show_warning_message(self):
# 创建警告消息框
QMessageBox.warning(self, "Warning", "This is a warning message.")
def ask_question(self):
# 创建询问消息框
result = QMessageBox.question(self, "Question", "Do you want to proceed?", QMessageBox.Yes | QMessageBox.No)
if result == QMessageBox.Yes:
print("User clicked Yes.")
else:
print("User clicked No.")
if __name__ == "__main__":
app = QApplication([])
example = MessageBoxExample()
example.show()
app.exec()
在这个例子中,我们创建了一个主窗口,包含三个按钮,每个按钮分别用于显示信息消息框、警告消息框和询问消息框。
关键的 QMessageBox
静态方法包括:
information(parent, title, text, buttons, defaultButton)
: 显示信息消息框。warning(parent, title, text, buttons, defaultButton)
: 显示警告消息框。question(parent, title, text, buttons, defaultButton)
: 显示询问消息框,返回用户的选择。
17.QCalendarWidget
日历控件,用于显示和选择日期
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget
class CalendarWidgetExample(QWidget):
def __init__(self):
super().__init__()
# 创建主窗口和布局
self.setWindowTitle("Calendar Widget Example")
layout = QVBoxLayout(self)
# 创建日历部件
calendar_widget = QCalendarWidget()
# 将日历部件添加到布局
layout.addWidget(calendar_widget)
if __name__ == "__main__":
app = QApplication([])
example = CalendarWidgetExample()
example.show()
app.exec()
QCalendarWidget
还提供了一些常用的方法和信号
selectedDate()
: 获取当前选中的日期。setCurrentPage(year, month)
: 设置当前显示的年份和月份。clicked(date)
: 当用户点击日历上的日期时发出的信号。
18.QCalendarWidget
- 用途:
QColorDialog
是一个用于选择颜色的对话框。 - 主要特性:允许用户选择标准颜色或自定义颜色。
from PySide6.QtWidgets import QApplication, QColorDialog
app = QApplication([])
color_dialog = QColorDialog()
color_dialog.exec()
19.QCompleter
QCompleter
是 PySide6(Qt for Python)中的一个强大控件,用于为用户提供自动完成功能。它可以与 QLineEdit
、QComboBox
等控件结合使用,当用户输入文本时,QCompleter
会根据预定义的词汇列表或模型提供候选项。以下是 QCompleter
的详细解析:
功能概述
-
自动完成功能:
-
QCompleter
可以根据用户输入的内容,从预定义的词汇列表或模型中生成候选项。 -
候选项通常以弹出列表的形式显示,用户可以直接选择。
-
-
支持多种数据源:
-
可以使用简单的字符串列表(
QStringListModel
)。 -
也可以使用更复杂的模型(如
QFileSystemModel
)来提供候选项。
-
-
自定义行为:
-
可以设置大小写敏感性、排序方式、最大可见项数等。
-
核心属性和方法
以下是 QCompleter
的一些关键属性和方法:
1. 设置数据源
-
setModel(model)
:-
设置提供候选项的模型。模型可以是
QStringListModel
或其他继承自QAbstractItemModel
的模型。 -
示例:
from PySide6.QtCore import QStringListModel model = QStringListModel(["apple", "banana", "cherry"]) completer = QCompleter(model)
-
-
setCompletionMode(mode)
:-
设置补全模式:
-
QCompleter.PopupCompletion
:显示一个弹出窗口(默认)。 -
QCompleter.UnfilteredPopupCompletion
:显示所有候选项,不进行过滤。 -
QCompleter.InlineCompletion
:在输入框中直接显示补全建议。
-
-
2. 设置大小写敏感性
-
setCaseSensitivity(caseSensitivity)
:-
设置匹配的大小写敏感性:
-
Qt.CaseSensitive
:区分大小写。 -
Qt.CaseInsensitive
:不区分大小写(默认)。
-
-
3. 设置排序方式
-
setModelSorting(sorting)
:-
设置候选项的排序方式:
-
QCompleter.UnsortedModel
:不排序(默认)。 -
QCompleter.CaseInsensitivelySortedModel
:不区分大小写排序。 -
QCompleter.CaseSensitivelySortedModel
:区分大小写排序。
-
-
4. 设置最大可见项数
-
setMaxVisibleItems(maxItems)
:-
设置弹出窗口中最多显示的候选项数量。
-
5. 获取当前候选项
-
currentCompletion()
:-
返回当前选中的候选项。
-
-
completionPrefix()
:-
返回当前输入的前缀。
-
6. 设置弹出窗口
-
setPopup(popup)
:-
设置自定义的弹出窗口(如
QListView
或QComboBox
)。
-
常见用法示例
1. 使用字符串列表作为数据源
from PySide6.QtWidgets import QApplication, QLineEdit, QCompleter
from PySide6.QtCore import QStringListModel
app = QApplication([])
# 创建 QLineEdit 和 QCompleter
line_edit = QLineEdit()
model = QStringListModel(["apple", "banana", "cherry", "date", "elderberry"])
completer = QCompleter(model)
completer.setCaseSensitivity(Qt.CaseInsensitive) # 设置不区分大小写
line_edit.setCompleter(completer)
line_edit.show()
app.exec()
2. 使用文件系统模型
from PySide6.QtWidgets import QLineEdit, QCompleter, QFileSystemModel
from PySide6.QtCore import QDir
app = QApplication([])
# 创建文件系统模型
file_model = QFileSystemModel()
file_model.setRootPath(QDir.currentPath()) # 设置根路径为当前目录
# 创建 QLineEdit 和 QCompleter
line_edit = QLineEdit()
completer = QCompleter(file_model)
completer.setCompletionMode(QCompleter.PopupCompletion)
completer.setCaseSensitivity(Qt.CaseInsensitive)
line_edit.setCompleter(completer)
line_edit.show()
app.exec()
信号
-
activated(completion)
:-
当用户选择一个候选项时触发,返回选中的候选项。
-
-
completed(completion)
:-
当候选项被插入到输入框中时触发。
-
-
highlighted(completion)
:-
当用户在候选项中移动时触发。
-