Pyside6常用控件用法,看完不允许你还不会用

PySide6(Qt for Python)作为一款功能强大的框架,为开发者提供了丰富的工具和组件,用于构建美观且实用的图形用户界面(GUI)。然而,面对众多的控件和复杂的文档,许多初学者可能会感到无从下手。本文将详细介绍 PySide6 中常用控件的用法,从基础到实战,帮助你快速掌握这些控件的使用方法。无论你是刚接触 GUI 开发的新手,还是希望进一步提升技能的开发者,本文都将为你提供实用的指导和参考。通过学习这些控件的用法,你将能够更高效地创建出功能丰富、用户体验良好的桌面应用程序

目录

布局管理器

QHBoxLayout

QVBoxLayout

QGridLayout

QFormLayout

QStackedLayout

常用控件

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

2. QPushButton按钮

3. QTextEdit多行文本输入框,用于接受用户的多行文本输入

4. QComboBox下拉框

5. QCheckBox

6. QRadioButton

7. QSpinBox 和 QDoubleSpinBox

8. QSlider

9. QProgressBar

10. QListWidget

11.QTreeWidget

12.QTabWidget

13.QFileDialog

16.QMessageBox

17.QCalendarWidget

18.QCalendarWidget 

19.QCompleter


布局管理器

在介绍组件之前,先介绍布局管理器它是布局管理组件,用于确定窗口中的组件怎么摆放。

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)或内置方法自定义按钮的外观。

  • 禁用按钮:可以设置按钮为禁用状态,此时按钮不可点击。

常见属性和方法

  1. 创建按钮

    button = QPushButton("Button Text", parent=None)
  2. 设置和获取按钮文本

    button.setText("New Text")  # 设置按钮文本
    text = button.text()        # 获取按钮文本
  3. 设置和获取按钮图标

    from PyQt5.QtGui import QIcon
    
    icon = QIcon("icon.png")    # 加载图标
    button.setIcon(icon)        # 设置按钮图标
    icon = button.icon()        # 获取按钮图标
  4. 禁用和启用按钮

    button.setDisabled(True)    # 禁用按钮
    button.setEnabled(False)    # 等同于 setDisabled(True)
    button.setEnabled(True)     # 启用按钮
  5. 设置固定大小

    button.setFixedSize(100, 30)  # 设置固定宽度和高度
    button.setMaximumSize(200, 50)  # 设置最大宽度和高度
    button.setMinimumSize(50, 20)   # 设置最小宽度和高度
  6. 设置样式表

     通过 setStyleSheet 方法可以设置按钮的样式,更多样式设置可参考PySide6的QSS 样式

    button.setStyleSheet(
        "QPushButton {"
        "background-color: rgb(255, 0, 0);"
        "color: white;"
        "border: none;"
        "}"
    )
  7. 设置按钮的快捷键 

    button.setShortcut('Ctrl+C')
  8. 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 的详细解析:

基本功能

  1. 显示树形结构

    • QTreeWidget 可以显示多级层次结构的数据,每一级称为一个节点。

    • 节点可以展开或折叠,方便用户查看层级关系。

  2. 支持多列显示

    • 可以设置多个列,每个节点在不同列中显示不同的内容。

  3. 支持节点操作

    • 添加、删除、移动节点。

    • 设置节点的文本、图标、复选框等。

  4. 支持排序和筛选

    • 可以启用排序功能,用户可以通过点击列标题对节点进行排序。

    • 支持隐藏列或调整列宽。

  5. 信号支持

    • 提供多种信号,如节点选中变化、双击事件、右键菜单等。

核心属性和方法

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. 性能优化

当数据量较大时,可以使用以下方法优化性能:

  1. setUniformRowHeights(True)

    • 提升渲染性能。

  2. 批量操作时禁用更新

    • 在批量添加或删除节点时,调用 tree_widget.setUpdatesEnabled(False) 禁用更新,操作完成后再调用 tree_widget.setUpdatesEnabled(True) 恢复更新。

  3. 使用 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()

注意事项

  1. 内存管理

    • QTreeWidgetItem 需要手动删除或设置父对象自动管理。

  2. 大数据量

    • 对于大数据量,推荐使用 QTreeView 配合模型(如 QFileSystemModel)。

  3. 节点行为

    • 可以通过 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)中的一个强大控件,用于为用户提供自动完成功能。它可以与 QLineEditQComboBox 等控件结合使用,当用户输入文本时,QCompleter 会根据预定义的词汇列表或模型提供候选项。以下是 QCompleter 的详细解析:

功能概述

  1. 自动完成功能

    • QCompleter 可以根据用户输入的内容,从预定义的词汇列表或模型中生成候选项。

    • 候选项通常以弹出列表的形式显示,用户可以直接选择。

  2. 支持多种数据源

    • 可以使用简单的字符串列表(QStringListModel)。

    • 也可以使用更复杂的模型(如 QFileSystemModel)来提供候选项。

  3. 自定义行为

    • 可以设置大小写敏感性、排序方式、最大可见项数等。

核心属性和方法

以下是 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)

    • 设置自定义的弹出窗口(如 QListViewQComboBox)。

常见用法示例

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)

    • 当用户在候选项中移动时触发。

### PySide6 常用控件概述 PySide6 是 Qt6 库的 Python 绑定,提供了一系列丰富的控件用于构建桌面应用程序。这些控件具有多种属性、方法、信号以及槽函数,能够满足同应用场景的需求[^1]。 ### QPushButton 控件 `QPushButton` 是一种按钮控件,通常用来触发特定的操作或响应用户的点击行为。下面是一个简单的 `QPushButton` 使用实例: ```python from PySide6.QtWidgets import QApplication, QPushButton, QWidget, QVBoxLayout app = QApplication([]) window = QWidget() layout = QVBoxLayout() button = QPushButton('Click Me') button.clicked.connect(lambda: print("Button clicked")) layout.addWidget(button) window.setLayout(layout) window.show() app.exec() ``` 此代码展示了如何创建一个带有文本 "Click Me" 的按钮,并连接到一个 lambda 函数,在每次按下该按钮时打印消息至控制台。 ### QLineEdit 控件 `QLineEdit` 提供了一个单行文本输入字段给用户。它允许设置占位符文字并获取当前编辑的内容。以下是关于 `QLineEdit` 的基本应用例子: ```python line_edit = QLineEdit() line_edit.setPlaceholderText("Enter your name here...") print(line_edit.text()) # 获取当前文本内容 ``` 这段脚本说明了怎样初始化一个带提示信息的文本框,并读取其中的数据。 ### QCheckBox 控件 对于布尔型的选择项来说,`QCheckBox` 非常适用。可以通过勾选状态的变化来判断选项是否被选中。这里有一个简单示例展示如何操作这个组件: ```python check_box = QCheckBox('Agree to terms and conditions') def on_state_changed(state): if state == Qt.CheckState.Checked: print("Checkbox is checked.") elif state == Qt.CheckState.Unchecked: print("Checkbox is unchecked.") check_box.stateChanged.connect(on_state_changed) ``` 上述片段解释了当复选框的状态发生改变时调用回调函数处理逻辑的方式[^4]。 ### QLabel 控件 如果需要显示静态的文字或者图片,则可以选择使用 `QLabel` 。它可以方便地更新内部内容而必重新布局整个窗口部件树结构。下面是有关于它的基础运用方式: ```python label = QLabel("This is a label") # 更新标签中的文本 label.setText("Updated text") ``` 这表明了设定初始文本和后续更改的方法。 ### QListWidget 控件 为了呈现一系列条目列表,可以考虑采用 `QListWidget` ,这是一种非常直观的方式来管理一组项目之间的交互。以下是如何向列表添加新项目的示范: ```python list_widget = QListWidget() for item_text in ["Item 1", "Item 2", "Item 3"]: list_item = QListWidgetItem(item_text) list_widget.addItem(list_item) ``` 以上代码段介绍了循环遍历字符串数组并将它们作为独立单元加入到列表视图内的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值