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

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

maynowei8个月前 (09-18)技术知识90

在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##程序员##好平台好讲师##桌面##热搜#

相关文章

Axure原型:化妆镜商城Web高保真原型+线框图

之前给大家分享了化妆镜商城APP高保真原型,继续给大家补充该原型的Web版。也顺便分享一个化妆镜商城web版的线框图。关于线框图的绘制几乎都是经验的总结,开始时建议大家用铅笔白纸绘制,初版概念确定后再...

从零搭建网站?5个步骤详解网站建设全流程

在数字化时代,拥有一个专业网站已成为企业或个人品牌展示的核心竞争力。但对于新手而言,网站建设往往显得复杂难懂。本文梳理出5大关键步骤,手把手带你完成从策划到上线的全流程,省时省力不踩坑!一、前期准备:...

那些技术—Listview的性能提高篇(listview提高效率)

ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。 · 1.在adapter中的...

Linux系统编程—互斥量mutex(linux 互斥量)

##互斥量mutex前文提到,系统中如果存在资源共享,线程间存在竞争,并且没有合理的同步机制的话,会出现数据混乱的现象。为了实现同步机制,Linux中提供了多种方式,其中一种方式为互斥锁mutex(也...

C++ 原子操作与锁的深度解析:为什么原子操作并非万金油?

大噶好,我是henry,今天来和大家浅浅聊一下为啥C++原子操作并非万能钥匙,原因有三,且听我娓娓道来:一、原子操作的线程安全性C++11 的 std::atomic 确实为单个变量的线程安全操作提供...

PL/SQL Developer连接Oracle数据库详解

序言:oracle数据库比较难搞,好不容易安装上了,但是怎么连接呢,直接在服务器里用自带的命令行操作太繁琐,所以PL/SQL Developer客户端的好处就显而易见了,今天和大家聊聊客户端具体配置方...