站点图标 高效码农

Python界面(GUI)编程PyQt5窗体小部件

一、简介

在Qt(和大多数用户界面)中,“小部件”是用户可以与之交互的UI组件的名称。用户界面由布置在窗口内的多个小部件组成。

Qt带有大量可用的小部件,也允许您创建自己的自定义和自定义小部件。

二、小部件列表

Qt文档中提供了所有小部件的完整列表,但让我们快速了解一下它们的实际效果。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

# 仅用于访问命令行参数
import sys


# 子类QMainWindow来定制你的应用程序的主窗口
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        
        self.setWindowTitle("高效码农")
        

        layout = QVBoxLayout()
        widgets = [QCheckBox,
            QComboBox,
            QDateEdit,
            QDateTimeEdit,
            QDial,
            QDoubleSpinBox,
            QFontComboBox,
            QLCDNumber,
            QLabel,
            QLineEdit,
            QProgressBar,
            QPushButton,
            QRadioButton,
            QSlider,
            QSpinBox,
            QTimeEdit]
        
        for w in widgets:
            layout.addWidget(w())
            
        
        widget = QWidget()
        widget.setLayout(layout)
        
        # 设置窗口的中心部件。小部件将在默认情况下展开以占据窗口中的所有空间。
        self.setCentralWidget(widget)


# 每个应用程序需要一个(且只有一个)QApplication实例。
# 如果确定不会使用命令行参数,QApplication([])也可以。
app = QApplication(sys.argv)

window = MainWindow()
window.show() # 重要!!!!! Windows 默认是隐藏的.

# 启动.
app.exec_()

运行效果:

让我们从上到下看一下所有示例小部件:

部件 中文
QCheckbox 复选框
QComboBox 下拉列表框
QDateEdit 用于编辑日期和日期时间
QDateTimeEdit 用于编辑日期和日期时间
QDial 旋转式转盘
QDoubleSpinbox 浮点数微调器
QFontComboBox 字体列表
QLCDNumber 显示器
QLabel 只是一个标签,不是交互式的
QLineEdit 单行文字
QProgressBar 进度条
QPushButton 按钮
QRadioButton 切换集,只有一个活动项
QSlider 滑块
QSpinBox 整数微调器
QTimeEdit 用于编辑时间

三、QLabel

我们从最简单的小部件QLabl开始。废话不多说上代码~~~

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

# 仅用于访问命令行参数
import sys


# 子类QMainWindow来定制你的应用程序的主窗口
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        
        self.setWindowTitle("高效码农")
        

        widget = QLabel("Hello") #用字符串Hello创建 QLabel部件,也可以使用.setText()方法
        # widget.setText("2")
        font = widget.font()
        font.setPointSize(300) # 设置QLabel字体大小
        widget.setFont(font)
        widget.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter) # 设置QLabel显示位置
        
        self.setCentralWidget(widget)


# 每个应用程序需要一个(且只有一个)QApplication实例。
# 如果确定不会使用命令行参数,QApplication([])也可以。
app = QApplication(sys.argv)

window = MainWindow()
window.show() # 重要!!!!! Windows 默认是隐藏的.

# 启动.
app.exec_()

运行效果:

参数 行为
Qt.AlignLeft 左对齐
Qt.AlignRight 右对齐
Qt.AlignHCenter 水平居中
Qt.AlignJustify 文本对齐
Qt.AlignTop 顶部对齐
Qt.AlignBottom 底部对齐
Qt.AlignVCenter 垂直居中

请注意,您使用OR管道(|)组合了两个标志(不是A & B)。这是因为标志是不重叠的位掩码。例如Qt.AlignLeft具有十六进制值0x0001,Qt.AlignBottom而是0x0040。
通过“或”运算,我们得到0x0041表示“左下” 的值。该原理适用于所有其他组合Qt标志。
如果您觉得这很乱,只记得使用’|‘ 就行了

四、QCheckBox

QCheckBox是向用户显示一个可复选框。与所有Qt小部件一样,有许多可配置的选项可以更改小部件的行为。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

# 仅用于访问命令行参数
import sys


# 子类QMainWindow来定制你的应用程序的主窗口
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        
        self.setWindowTitle("高效码农")
        

        widget = QCheckBox()
        # 设置复选框状态 分别为:Qt.Unchecked 未选中  Qt.PartiallyChecked 中间状态(没有被选中,也没有不被选中) Qt.Checked 已选中
        widget.setCheckState(Qt.PartiallyChecked) 

        widget.stateChanged.connect(self.show_state)

        self.setCentralWidget(widget)
        
        
    def show_state(self, s):
        print(s == Qt.Checked)
        print(s)


# 每个应用程序需要一个(且只有一个)QApplication实例。
# 如果确定不会使用命令行参数,QApplication([])也可以。
app = QApplication(sys.argv)

window = MainWindow()
window.show() # 重要!!!!! Windows 默认是隐藏的.

# 启动.
app.exec_()

五、QComboBox

QComboBox是一个下拉列表,默认情况下关闭,用箭头打开。您可以从列表中选择一个项目,当前选中的项目将显示为小部件上的标签。组合框适合于从一长列选项中选择一个选项。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

# 仅用于访问命令行参数
import sys


# 子类QMainWindow来定制你的应用程序的主窗口
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        
        self.setWindowTitle("高效码农")
        

        widget = QComboBox()
        widget.addItems(["One", "Two", "Three"])

        # 默认传递索引
        widget.currentIndexChanged.connect( self.index_changed )
        
        # 同样的信号也可以发送文本
        widget.currentIndexChanged[str].connect( self.text_changed )

        self.setCentralWidget(widget)


    def index_changed(self, i): # i is an int
        print(i)
        
    def text_changed(self, s): # s is a str
        print(s)


# 每个应用程序需要一个(且只有一个)QApplication实例。
# 如果确定不会使用命令行参数,QApplication([])也可以。
app = QApplication(sys.argv)

window = MainWindow()
window.show() # 重要!!!!! Windows 默认是隐藏的.

# 启动.
app.exec_()

六、QLineEdit

QLineEdit小部件是一个简单的单行文本编辑框,用户可以在其中输入信息。例如,在输入电子邮件地址或计算机名称时。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

# 仅用于访问命令行参数
import sys


# 子类QMainWindow来定制你的应用程序的主窗口
class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        
        self.setWindowTitle("高效码农")
        

        widget = QLineEdit()
        widget.setMaxLength(10)
        widget.setPlaceholderText("Enter your text")

        #widget.setReadOnly(True) # 设置只读
        
        widget.returnPressed.connect(self.return_pressed) # 回车事件
        widget.selectionChanged.connect(self.selection_changed)
        widget.textChanged.connect(self.text_changed) # 文本改变事件
        widget.textEdited.connect(self.text_edited) # 文本编辑事件

        self.setCentralWidget(widget)
        
        
    def return_pressed(self):
        print("Return pressed!")
        self.centralWidget().setText("BOOM!")

    def selection_changed(self):
        print("Selection changed")
        print(self.centralWidget().selectedText())
        
    def text_changed(self, s):
        print("Text changed...")
        print(s)
            
    def text_edited(self, s):
        print("Text edited...")
        print(s)


# 每个应用程序需要一个(且只有一个)QApplication实例。
# 如果确定不会使用命令行参数,QApplication([])也可以。
app = QApplication(sys.argv)

window = MainWindow()
window.show() # 重要!!!!! Windows 默认是隐藏的.

# 启动.
app.exec_()
退出移动版