当前位置:首页 > 技术知识 > 正文内容

第8天 | 28天学会PyQt5,窗口事件

maynowei7个月前 (09-18)技术知识76

在QWidget和QMainWindow窗口中,提供了鼠标和键盘的处理函数,你需要用到时,进行重载即可。事件重载方法里的e代表了事件对象,mouseMoveEvent(self,e)里e表示QMouseEvent的对象,用对象的x()和y()方法,可以得到鼠标的x和y坐标点。更多可重载的事件方法,可以查看QWidget的源代码。除了之前讲过的重载contextMenuEvent(self, e)方法,实现上下文菜单外,常用的方法还有如下几个:

方法

描述

paintEvent(self, e)

鼠标拖动窗口,改变窗口大小时触发;

mouseMoveEvent(self, e)

鼠标在窗口中移动时,触发事件;

keyPressEvent(self, e)

键盘按键按下后触发;

closeEvent(self, e)

监听关闭窗口。

程序清单:win_event.py

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


# 继承QWidget
class WinEvent(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        # 调整窗口大小
        self.resize(900, 500)
        # 窗口居中
        self.center()
        # 窗口标题
        self.setWindowTitle("窗口事件")
        # 显示窗口
        self.show()

    # 窗口改变大小时触发
    def paintEvent(self, e):
        rect = e.rect()
        print("宽为:%d,高为:%d" % (rect.width(), rect.height()))

    # 鼠标移动
    def mouseMoveEvent(self, e):
        self.setMouseTracking(True)
        pos = e.windowPos()
        print("x坐标:" + str(pos.x()) + ",y坐标:" + str(pos.y()))

    # 监听按下键盘
    def keyPressEvent(self, e):
        print("键盘按下的键盘代码为:%s" % e.key())
        if e.key() == Qt.Key_Escape:
            self.close()

    # 关闭窗口
    def closeEvent(self, e):
        result = QMessageBox.information(self, "退出提醒", 
                                         "你确定要退出系统?",
                                         QMessageBox.Yes |
                                         QMessageBox.No)
        if result == QMessageBox.Yes:
            print("执行退出动作")
            self.close()

    # 实现居中
    def center(self):
        f = self.frameGeometry()
        c = QDesktopWidget().availableGeometry().center()
        f.moveCenter(c)
        self.move(f.topLeft())


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = WinEvent()
    sys.exit(app.exec_())

运行程序之后,弹出的窗口如下:

好了,窗口事件的内容就说到这里了,关注我,下一节更精彩。

码字不易,你的关注和转发是对我最大的鼓励,谢谢!

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!

#python##程序员##好平台好讲师##桌面##热搜#

相关文章

[三菱PLC] 用"C语言"玩转PLC,三菱PLC使用ST语言超详细教程

ST语言,全称为结构化文本(Structured Text),是一种高级编程语言,专为工业自动化和控制系统设计。我们学习PLC一般是用梯形图,梯形图学会后,学习SFC,但是我发现梯形图和SFC虽然简单...

btrace 3.0 重磅新增 iOS 支持!免插桩原理大揭秘!

重磅更新btrace 是由字节跳动抖音基础技术团队自主研发的面向移动端的性能数据采集工具,它能够高效的助力移动端应用采集性能 Trace 数据,深入剖析代码的运行状况,进而辅助优化提升移动端应用的性能...

go语言并发原语RWMutex实现原理及闭坑指南

1.RWMutex常用方法Lock/UnlockRLock/RUnlockRLocker 为读操作返回一个Locker接 口的对象2. RWMutex使用方法 func main() { var c...

centos系统安装oracle简易客户端instantclient

一、目录1:centos 环境准备2:instant client 下载3:instant client 安装4:instant client 配置5:测试连接二、安装步骤1:zip,unzip命令安...

Oracle中泄露“天机”的TNS(在oracle中发出的下列查询)

数据库的安全是长期存在的问题。在目前大量的数据泄露事件以及漏洞面前,大家看到的大都是SQl注入、越权操作、缓冲区溢出等这些具体漏洞。往往却忽视了造成这些问题的前提,黑客想要入侵数据库一定会尝试获取数据...

你可能疏忽的plsql和navicat连接Oracle注意点

在日常开发中,我们总是少不了要连接数据库,你是否遇到过填写的账号、密码、连接地址都对,但就是连接不上Oracle的情况?这里说一下其中一种连接不上Oracle的原因,这种情况简单,但很可能被疏忽。记下...