PyQt5的学习之路(五)

本文通过四个实例介绍PyQt5中信号与槽机制的应用:实现拖动条与数字显示器联动;重写按键事件使程序能响应特定按键退出;通过按钮触发事件并在状态栏显示信息;使用自定义信号实现鼠标点击事件关闭窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

信号&槽机制

#! /usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QSlider, QVBoxLayout
from PyQt5.QtCore import Qt

class Myform(QWidget):

    def __init__(self):

        super(QWidget, self).__init__()
        self.initUI()

    def initUI(self):

        lcd = QLCDNumber(self)      # 创建一个数字显示器
        sld = QSlider(Qt.Horizontal, self)    # 创建一个拖动条

        vbox = QVBoxLayout()
        vbox.addWidget(lcd)
        vbox.addWidget(sld)

        self.setLayout(vbox)

        # signal & slot:当拖动条的值改变触发事件(值显示到数字板上)
        #              信号(事件源)   槽(事件对象)     事件目标
        sld.valueChanged.connect(lcd.display)

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('signalslot')
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())

事件重写

#! /usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtCore import Qt

class Myform(QWidget):

    def __init__(self):

        super(Myform, self).__init__()
        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('reimplement')
        self.show()

    # 重写了KeyPressEvent事件函数
    def keyPressEvent(self, e):

        # 当按下键盘上的'q'时,程序退出
        if e.key() == Qt.Key_Q:
            self.close()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())

事件发送者

#! /usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QPushButton, QVBoxLayout, QHBoxLayout


class Myform(QMainWindow):

    def __init__(self):

        super(Myform, self).__init__()
        self.initUI()

    def initUI(self):

        btn1 = QPushButton('Button1', self)
        btn2 = QPushButton('Button2', self)

        # 为按钮添加点击事件
        btn1.clicked.connect(self.buttonClicked)
        btn2.clicked.connect(self.buttonClicked)

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(btn1)
        hbox.addWidget(btn2)

        vbox = QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)

        widget = QWidget()
        widget.setLayout(vbox)
        self.setCentralWidget(widget)       # QMainWindow有自己的布局了,所以不能直接setLayout


        self.resize(300, 200)
        self.move(300, 300)
        self.setWindowTitle('sender')
        self.show()

        self.statusBar()

    def buttonClicked(self):

        # 事件: 显示信号发出者
        sender = self.sender()
        self.statusBar().showMessage(sender.text() + ' was pressed')

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())

事件发送

#! /usr/bin/python
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import pyqtSignal, QObject

# 定义新事件类
class Communicate(QObject):

    closeApp = pyqtSignal()

class Myform(QMainWindow):

    def __init__(self):

        super(Myform, self).__init__()
        self.initUI()

    def initUI(self):

        self.c = Communicate()
        self.c.closeApp.connect(self.close)

        self.move(300, 300)
        self.resize(300, 200)
        self.setWindowTitle('emitsignal')
        self.show()

    # 事件传递
    def mousePressEvent(self, event):

        self.c.closeApp.emit()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = Myform()
    sys.exit(app.exec_())
### PyQt5 学习教程入门指南 #### 一、PyQt5简介 PyQt5 是 Qt v5 的 Python 绑定库,提供了丰富的工具集用于开发跨平台的图形用户界面(GUI)应用程序[^3]。它支持多种操作系统,包括 Windows、macOS 和 Linux,并且具有 GPL V3 协议下的开源特性。 #### 二、环境搭建 在开始学习之前,需要安装必要的依赖项。可以通过 `pip` 安装 PyQt5 库: ```bash pip install pyqt5 ``` 如果计划使用 QT Designer 设计 UI 文件,则还需要额外安装 `pyqt5-tools`: ```bash pip install pyqt5-tools ``` #### 三、核心概念与组件介绍 PyQt5 提供了许多重要的类和模块来帮助开发者创建复杂的 GUI 应用程序。以下是几个常用的核心组件及其作用: - **QApplication**: 所有基于 PyQt5 的应用都需要先初始化一个 QApplication 对象[^5]。 - **QWidget**: 这是最基本的窗口部件,可以作为其他控件的基础容器。 - **QPushButton**: 创建按钮并绑定点击事件。 下面是一个简单的例子,展示了如何创建一个带有按钮的小型窗口: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QPushButton class Example(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): button = QPushButton('Click Me', self) button.move(50, 50) self.setGeometry(300, 300, 250, 150) self.setWindowTitle('Simple Window') self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` #### 四、资源推荐 对于初学者来说,《PyQt5入门中文教程》是一本非常实用的学习材料[^2]。该书通过大量图表和实例代码逐步引导读者掌握 PyQt5 的基础知识和技术细节。此外,还可以参考在线文档和社区讨论获取更多实践技巧[^4]。 #### 、注意事项 当尝试运行任何 PyQt5 程序时,请确保始终先创建一个 QApplication 实例;否则可能会遇到错误提示:“QWidget: Must construct a QApplication before a QWidget”。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值