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 – 在组合框中通过文本查找项目

    介绍:PyQt5是一个基于Python的图形用户界面(GUI)库,可以使用它来创建各种窗口、工具栏、组合框等控件。在这里,我们将介绍如何通过PyQt5中的组合框找到指定的项目。 创建组合框和列表框 首先,我们需要在窗口中创建一个组合框和一个列表框。代码如下: from PyQt5.QtWidgets import * class Example(QWidge…

    python 2023年5月10日
    00
  • PyQt5–为不可编辑的组合框设置按压时的背景图片

    在PyQt5中,我们可以使用QComboBox来创建下拉框,但默认情况下,QComboBox是不可编辑的。如果想要自定义QComboBox组件在按压时显示的背景图片,可以按照以下步骤进行操作: 从PyQt5.QtCore模块中导入Qt和pyqtSignal类。从PyQt5.QtWidgets模块中导入QComboBox, QLabel和QPixmap类。 f…

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

    PyQt5是Python语言下的一个GUI框架,提供了丰富的界面组件,其中包括了组合框(QComboBox)。在使用QComboBox时,可能有时需要将其设置为不可编辑,同时当被按下时需要显示不同的边框颜色。本文将详细讲解如何实现这两种效果。 将组合框设置为不可编辑 要想将组合框设置为不可编辑,只需要将其设置为只读模式即可。下面是一个基础的实现示例: fro…

    python 2023年5月11日
    00
  • PyQt5组合框 不可编辑时的不同边框颜色

    以下是Python中使用PyQt5组合框时,设置不可编辑时的边框颜色的完整使用攻略: 1. 概述 PyQt5是Python中的GUI(图形用户界面)编程框架,支持开发各种平台的应用程序。其中,组合框(QComboBox)是一种常用的交互控件,可用于选择一项或多项数据。 在PyQt5中,我们可以设置组合框不可编辑时的边框颜色。默认情况下,不可编辑时的边框颜色与…

    python 2023年5月11日
    00
  • PyQt5 QSpinBox – 根据文本调整大小

    PyQt5是Python语言的一个GUI图形界面开发框架。QSpinBox是PyQt5中一个可调整数值的控件,可以用于设置数字、日期或者时间等属性。在本篇文章中,我们将详细介绍如何使用PyQt5的QSpinBox控件根据文本调整大小。 安装PyQt5 使用QSpinBox前,需要先安装PyQt5库。 可以使用pip命令在命令行中安装PyQt5: pip in…

    python 2023年5月12日
    00
  • PyQt5 QCalendarWidget 标题改变的信号

    PyQt5是Python的一个GUI编程库,其中QCalendarWidget是其提供的一个日历控件。QCalendarWidget提供的信号让我们可以在应用程序中对其进行操作。 其中,用于标题改变的信号是selectionChanged(),当你选择不同的日期时,标题就会相应地改变。 以下是使用QCalendarWidget标题改变的信号的完整使用攻略: …

    python 2023年5月11日
    00
  • PyQt5组合框 不可编辑和鼠标悬停时的不同边框颜色

    下面我将为您详细讲解Python PyQt5组合框不可编辑和鼠标悬停时的不同边框颜色的使用攻略。 组合框不可编辑的实现 设置组合框不可编辑 要实现组合框不可编辑,可以使用Qt的属性设置。我们可以将QComboBox的setEditable方法设置为False,实现组合框不可编辑的效果。代码示例如下: from PyQt5.QtWidgets import Q…

    python 2023年5月11日
    00
  • PyQt5组合框 按压时的不同边框尺寸

    首先需要了解的是,在PyQt5中,组合框(QComboBox)有三种状态:正常状态、悬停状态和按下状态。当组合框处于按下状态时,它的边框尺寸会发生变化,以响应用户的交互操作。 PyQt5允许我们通过StyleSheet(样式表)来自定义组合框的外观。来看一个基本的样式表示例: comboBox = QComboBox() comboBox.setStyleS…

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