PyQt5 基础教程

PyQt5 是针对 Python 的一套 GUI(图形用户界面)框架,它可以用于开发不同平台(Windows、Linux、Mac OS)下的应用程序。本教程将介绍 PyQt5 的基础知识,包括 Qt Designer(一个 GUI 工具)的使用、部件(widget)的使用、布局管理、事件处理和线程等。

安装 PyQt5

在安装 PyQt5 之前需要先安装 Python,推荐安装 Python 3.x 版本。接着,你可以通过以下命令在命令行中安装 PyQt5:

pip install PyQt5

Qt Designer 的使用

Qt Designer 是一个 GUI 工具,用于设计 GUI 界面。使用 Qt Designer 可以快速创建应用程序的用户界面。

要使用 Qt Designer,可以通过以下命令启动它:

designer

或者在 PyQt5 中使用以下命令启动:

from PyQt5 import QtWidgets, uic

app = QtWidgets.QApplication([])

dlg = uic.loadUi("mainWindow.ui")
dlg.show()

app.exec()

其中,mainWindow.ui 是通过 Qt Designer 创建的一个用户界面文件。

部件的使用

PyQt5 中的部件是用于创建 GUI 界面的基本单元,包括按钮、文本框、标签、进度条等。以下是一些常用的部件:

  • QLabel:用于显示文本和图像。
  • QLineEdit:用于接受用户输入的文本框。
  • QPushButton:用于触发某些动作的按钮。
  • QCheckBox:用于选择一个或多个选项的复选框。
  • QRadioButton:用于在一组互斥的选项中选择一个的单选按钮。

以下是一个使用 QPushButton 和 QLabel 的示例代码:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout

app = QApplication([])
window = QWidget()

layout = QVBoxLayout()
button = QPushButton('Click me')
label = QLabel('Hello World')

layout.addWidget(button)
layout.addWidget(label)

window.setLayout(layout)

def on_button_clicked():
    label.setText('Button clicked')

button.clicked.connect(on_button_clicked)

window.show()
app.exec()

布局管理

通过布局管理,可以更好地控制 GUI 界面中部件的位置和大小,使得应用程序的用户界面更加整洁美观。

PyQt5 中常用的布局管理器有 QVBoxLayout、QHBoxLayout、QGridLayout 和 QFormLayout。

以下是一个使用 QHBoxLayout 的示例代码:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QHBoxLayout

app = QApplication([])
window = QWidget()

layout = QHBoxLayout()
button1 = QPushButton('Button 1')
button2 = QPushButton('Button 2')

layout.addWidget(button1)
layout.addWidget(button2)

window.setLayout(layout)

window.show()
app.exec()

事件处理

事件处理用于在用户与部件进行交互时响应事件,例如单击、拖动、滚动等。

在 PyQt5 中,事件处理主要通过信号(signal)和槽(slot)来实现。信号是在部件上发生的事件,例如按钮被单击。槽是与信号相关联的 Python 函数,当信号被发射时槽将被调用。

以下是一个使用信号和槽的示例代码:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox

app = QApplication([])
window = QWidget()

button = QPushButton('Click me')
window.setCentralWidget(button)

def on_button_clicked():
    QMessageBox.information(window, 'Message', 'Button clicked')

button.clicked.connect(on_button_clicked)

window.show()
app.exec()

示例说明

示例一:一个计算器应用程序

以下是一个简单的计算器应用程序,支持加、减、乘、除四种运算。

from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLineEdit, QPushButton

class CalculatorWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('Calculator')
        self.setFixedSize(300, 250)

        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)

        grid_layout = QGridLayout(central_widget)

        self.input_field = QLineEdit()
        self.input_field.setReadOnly(True)

        buttons = [
            'C', 'Del', '+', '-',
            '7', '8', '9', '*',
            '4', '5', '6', '/',
            '1', '2', '3', '=',
            '0', '.', '(', ')'
        ]

        positions = [(i, j) for i in range(5) for j in range(4)]
        for position, label in zip(positions, buttons):
            button = QPushButton(label)
            grid_layout.addWidget(button, *position)

            if label == 'C':
                button.clicked.connect(self.clear_input_field)
            elif label == 'Del':
                button.clicked.connect(self.delete_last_input_character)
            elif label == '+':
                button.clicked.connect(self.addition)
            elif label == '-':
                button.clicked.connect(self.subtraction)
            elif label == '*':
                button.clicked.connect(self.multiplication)
            elif label == '/':
                button.clicked.connect(self.division)
            elif label == '=':
                button.clicked.connect(self.calculate)
            else:
                button.clicked.connect(lambda value=label: self.append_input_field(value))

    def clear_input_field(self):
        self.input_field.clear()

    def delete_last_input_character(self):
        text = self.input_field.text()
        self.input_field.setText(text[:-1])

    def append_input_field(self, value):
        self.input_field.setText(self.input_field.text() + str(value))

    def addition(self):
        self.append_input_field('+')

    def subtraction(self):
        self.append_input_field('-')

    def multiplication(self):
        self.append_input_field('*')

    def division(self):
        self.append_input_field('/')

    def calculate(self):
        try:
            result = eval(self.input_field.text())
        except:
            result = 'Error'

        self.input_field.setText(str(result))

app = QApplication([])
window = CalculatorWindow()
window.show()
app.exec()

示例二:一个简单的时钟应用程序

以下是一个简单的时钟应用程序,每秒钟更新当前时间。

from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QLabel

class ClockWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setWindowTitle('Clock')
        self.setFixedSize(250, 100)

        central_widget = QWidget(self)
        self.setCentralWidget(central_widget)

        layout = QVBoxLayout(central_widget)

        self.time_label = QLabel()
        layout.addWidget(self.time_label)

        timer = QTimer(self)
        timer.timeout.connect(lambda: self.time_label.setText(QTime.currentTime().toString()))
        timer.start(1000)

app = QApplication([])
window = ClockWindow()
window.show()
app.exec()

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5 基础教程 - Python技术站

(0)
上一篇 2023年5月12日
下一篇 2023年5月12日

相关文章

  • PyQt5 QSpinBox – 设置样式名称

    PyQt5是一种流行的Python GUI框架,提供了许多UI组件来创建应用程序。QSpinBox是其中一个UI组件,用于允许用户输入数字值。在PyQt5中,我们可以通过设置样式名称来自定义QSpinBox的外观。下面是关于如何使用“PyQt5 QSpinBox-设置样式名称”的完整攻略。 1. 设置样式名称 在PyQt5中,可以使用setObjectNam…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 为所有状态的上个月按钮设置边框

    首先,我们需要导入PyQt5中的QCalendarWidget类和QProxyStyle类。 from PyQt5.QtWidgets import QCalendarWidget from PyQt5.QtWidgets import QProxyStyle 接着,我们将创建一个CustomCalendarStyle类并继承QProxyStyle类,用于自…

    python 2023年5月12日
    00
  • PyQt5组合框 当不可编辑和被按下时的不同边框尺寸

    Python中的PyQt5是一个类库,用于在GUI应用程序中创建图形用户界面。其中的组合框(QComboBox)在不可编辑和被按下时,其边框尺寸是有区别的。以下是两个示例,说明如何使用PyQt5组合框的不同边框尺寸。 示例一:创建不可编辑的组合框 下面代码演示了如何创建不可编辑的组合框,并将其边框尺寸设置为不同大小(在按下和不按下时设置不同的边框)。 imp…

    python 2023年5月11日
    00
  • PyQt5 QDateEdit – 设置用户可以输入的最小日期

    好的。首先,QDateEdit是Qt框架在PyQt5下的一个日期选择控件。它可以让用户选择一个合法的日期,并且支持设置最小和最大日期。我们可以通过设置它的日期范围限制,来让用户只能够选择在指定日期之间的日期。下面是具体的使用攻略,包含两条示例说明: 1. 设置最小日期范围 要设置用户可以输入的最小日期,可以使用QDateEdit控件的setMinimumDa…

    python 2023年5月12日
    00
  • PyQt5 – 查找单选按钮是否被选中

    下面是详细讲解python的PyQt5查找单选按钮是否被选中的完整使用攻略。 1. 安装PyQt5 首先需要在本地安装PyQt5的库,可以使用pip命令进行安装: pip install PyQt5 2. 创建单选按钮和按钮组 在PyQt5中,单选按钮需要被添加到QButtonGroup中才能实现单选的功能。以下是创建单选按钮和按钮组的示例代码: impor…

    python 2023年5月10日
    00
  • PyQt5 QDateTimeEdit – 清除最大的QDateTime

    PyQt5是一个Python编程语言的GUI库,提供了多组件和工具类,其中QDateTimeEdit组件用于显示和编辑日期和时间。本篇文章将讲解如何使用QDateTimeEdit组件清除最大的QDateTime。 1. QDateTimeEdit组件简介 QDateTimeEdit组件用于显示和编辑日期和时间。它提供了以下功能: 显示日期和时间 编辑日期和时…

    python 2023年5月12日
    00
  • PyQt5组合框 用户输入的项目按字母顺序存储

    Python的PyQt5库提供了一个名为QComboBox的控件,该控件通常用于提供一个下拉菜单以供用户选择。可以使用addItem()方法向QComboBox添加项目,也可以使用insertItem()方法将项目插入到特定的位置。 要将用户输入的项目按字母顺序存储,可以使用QComboBox的sortItems()方法。该方法会自动将所有项目按字母顺序进行…

    python 2023年5月11日
    00
  • PyQt5 QCalendarWidget 获得毫米级的高度

    下面我将详细讲解Python中如何使用PyQt5的QCalendarWidget获得毫米级的高度: 简介 QCalendarWidget是PyQt5中的一个日历插件,可以用于显示当月的日历,同时还支持选择日期和设置日期的功能。该插件的默认高度为170个像素(px),而如果想要获得毫米级的高度,则需要进行一些特殊的设置和计算。 步骤 导入QCalendarWi…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部