python之pyqt专栏10-键盘事件

需求

        通过按键盘的上下左右,移动button的位置。

UI界面设计

代码 

# 导入sys模块
import sys

from PyQt6.QtCore import Qt
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget

# untitled模块中导入Ui_Form类
from untitled import Ui_Form


class MyMainForm(QWidget, Ui_Form):
    def __init__(self, parent=None):
        # 调用父类的构造函数
        super(MyMainForm, self).__init__(parent)
        # 调用继承Ui_Form过来的setupUi函数
        self.setupUi(self)
        # self.setFocusPolicy()
        self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
    def keyPressEvent(self, a0):
        # 获取当前位置
        pass



    def keyReleaseEvent(self, a0):
        self.btnx = self.pushButton.pos().x()
        self.btny = self.pushButton.pos().y()
        if (a0.key() == Qt.Key.Key_Left):
            self.btnx = self.btnx - 5
            print(f"left:{self.btnx}")

        elif (a0.key() == Qt.Key.Key_Right):
            self.btnx = self.btnx + 5
            print(f"left:{self.btnx}")

        elif (a0.key() == Qt.Key.Key_Up):
            self.btny = self.btny - 5

        elif (a0.key() == Qt.Key.Key_Down):
            self.btny = self.btny + 5
        else:
            pass
        self.pushButton.move(self.btnx, self.btny)




# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    # 实例化应用
    app = QApplication(sys.argv)
    # 实例化MyMainForm
    myw = MyMainForm()
    myw.show()
    # 启动应用程序的事件循环并等待用户交互,直到应用程序关闭。
    sys.exit(app.exec())

        

 代码解释:

         1:设置窗口获取焦点,否者通过按键可以没有反应

 self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)

 

         2:与鼠标事件一样,如果需要实现键盘事件,也需要对键盘事件进行重写。由于只是对键盘按下与抬起(可以在QWidget找到它们,如下图),只实现对keyReleaseEvent(self, a0):

                

         获取button相对于窗体的位置

self.btnx = self.pushButton.pos().x()
self.btny = self.pushButton.pos().y()

       判断哪个方向键被按下,改变对应的坐标,通过key(),获取按下的键

        当键盘左键被按下,x坐标-5;

        当键盘右键被按下,x坐标+5;

        当键盘上键被按下,y坐标-5;

        当键盘下键被按下, y坐标-5;

        if (a0.key() == Qt.Key.Key_Left):
            self.btnx = self.btnx - 5
            print(f"left:{self.btnx}")

        elif (a0.key() == Qt.Key.Key_Right):
            self.btnx = self.btnx + 5
            print(f"left:{self.btnx}")

        elif (a0.key() == Qt.Key.Key_Up):
            self.btny = self.btny - 5

        elif (a0.key() == Qt.Key.Key_Down):
            self.btny = self.btny + 5
        else:
            pass

 Qt.Key.按键编号,可以在Qt — PyQt Documentation v6.6.0里面找到

         移动按钮位置

self.pushButton.move(self.btnx, self.btny)

        结果

        

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/208356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高等数学中的近似计算

今天来总结一下同济版高数中有关近似计算的例子,总的来说是如下的三种,有遗漏的话可以在评论区指出~ 目录 一.微分在近似计算中的应用 二.全微分在近似计算中的应用 三.函数的幂级数展开在近似计算的应用 一.微分在近似计算中的应用 本质原理是&am…

【Openstack Train安装】十三、创建实例

在先前的教程中,介绍了安装openstack及其相关组件的具体过程,本文介绍如何创建实例并完成访问。 在按照本教程操作之前,请确保完成以下配置: 【Openstack Train安装】一、虚拟机创建 【Openstack Train安装】二、NTP安装 【Op…

记一次SQL Server磁盘突然满了导致数据库锁死事件is full due to ‘LOG_BACKUP‘.

背景 最近我们的sql server 数据库磁盘在80左右,需要新增磁盘空间。还是处以目前可控的范围内,但是昨天晚上告警是80%,凌晨2:56分告警是90%,今天早上磁盘就满了。 经过 通过阿里云后台查看,磁盘已经占据99%&#xff0c…

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃

LabVIEW在调用image.cpp或drawmgr.cpp因为DAbort而崩溃 出现下列问题,如何解决? 1. LabVIEW 程序因image.cpp或drawmgr.cpp中的错误而崩溃 2. 正在通过cRIO-9034运行独立的LabVIEW应用程序,但它因drawmgr.cpp中的错误而崩溃 …

程序员的侦探故事:调试中的逻辑与直觉

“在理论上,理论和实践是相同的。在实践中,它们不是。” — Yogi Berra 在技术的世界里,“bug”一词如今已成为编程语言中的常客,它代表着程序中的错误与缺陷,但你知道这个术语的起源吗? 它追溯到了1947年…

CV计算机视觉每日开源代码Paper with code速览-2023.11.28

点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【图像分割】Stable Segment Anything Model 论文地址:https://arxiv.org//pdf/2311.15776 开源代码(即将开源&…

文件重命名不再困难:文件智能化重命名技巧,告别手动提升效率

在日常工作中,经常会遇到要修改文件名的场景。传统的文件重命名方法往往要手动输入新的文件名,不仅耗时而且容易出错。为了提高效率,可以采用一些智能化重命名的技巧,告别手动修改文件名的繁琐过程,让文件重命名变得更…

SpringBoot+mysql+vue实现大学生健康档案管理系统前后端分离

一、项目简介 本项目是一套基于SpringBoot实现大学生健康档案管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试&#…

BootLoader升级过程讲解与串口升级案列

一、芯片选择 STM32F103RCT6 FLASH容量:512K RAM容量:48K 二、升级方式选择: 串口升级、网口升级、4G升级、SD卡升级等等。 1、SD卡升级属于升级文件事先存储在外部FLASH,不需要考虑获取升级文件的代码和升级文件存放的位置&am…

RabbitMQ学习一

RabbitMQ学习 RabbitMQ相关概念Virtual host数据隔离SpringAMQP第一种 基本消息模型第二种 WorkQueues模型第三种 发布订阅模型(fanout交换机)fanout交换机实例 第四种 Direct交换机direct交换机实例基于注解的方式声明——direct交换机 第五种Topic交换…

[原创]Delphi的SizeOf(), Length(), 动态数组, 静态数组的关系.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

MySQL核心知识点整理大全1-笔记

MySQL 是一种流行的关系型数据库管理系统,它是以C和C语言编写的,最初是由瑞典公司MySQL AB开发的,现在是由Oracle公司维护和支持。MySQL是开源软件,可在Windows、Linux、Mac OS、FreeBSD等各种操作系统上运行。MySQL的主要特点是速…

图像增强与复原、车牌检测与识别,交通最优路径搜索模型,并且基于PyQt完成GUI设计

背景: 综合实训教学大纲 一、实训科目设置: 序号 内容提要 教学 条件 一 图像增强与复原、车牌检测与识别,并且基于PyQt完成GUI设计 计算机、Python软件 二 交通最优路径搜索模型,并且基于PyQt完成GUI设计 计算机、Pytho…

[每周一更]-(第75期):Go相关粗浅的防破解方案

Go作为编译语言,天然存在跨平台的属性,我们在编译完成后,可以再不暴露源代码的情况下,运行在对应的平台中,但是 还是架不住有逆向工程师的反编译、反汇编的情形;(当然我们写的都不希望被别人偷了…

ringboot-cve_2021_21234:latestSpring Boot 目录遍历 (CVE-2021-21234)漏洞复现

Spring Boot 目录遍历 (CVE-2021-21234)漏洞复现 Spring-boot-actuator-logview 0.2.13之前版本存在路径遍历漏洞,攻击者可通过该缺陷读取系统任意文件。 名称: Spring Boot 目录遍历 (CVE-2021-21234) 描述: Sprin…

【Java 基础】13 异常

1.异常是什么 异常是指在程序运行过程中可能发生的、与正常执行流程不符的事件。这些事件可能包括错误、不合理的输入、资源不足等。在 Java 中,异常是通过 throw 语句抛出的,可以是 Java 内置的异常类,也可以是自定义的异常类。 2. 异常类…

12月01日,每日信息差//阿里国际发布3款AI设计生态工具//美团买菜升级为“小象超市”//外国人永居证换新、6国游客免签来华

_灵感 🎖 阿里国际发布3款AI设计生态工具 🎄 AITO问界系列11月交付新车18827辆 🌍 美团买菜升级为“小象超市” 🌋 全球首个金融风控大模型国际标准出炉,由腾讯牵头制定 🎁 支付宝:支持外国人…

【代码】基于算术优化算法(AOA)优化参数的随机森林(RF)六分类机器学习预测算法/matlab代码

代码名称:基于算术优化算法(AOA)优化参数的随机森林(RF)六分类机器学习预测算法/matlab代码 使用算术优化算法(AOA)优化分类预测模型的参数,收敛性好,准确率提升明显&am…

中职组网络安全-web-PYsystem003.img-(环境+解析)

​ web安全渗透 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为flag值提交; 访问该网页后发现F12被禁用,使用ctrlshifti查看 ctrlshifti 等效于 F12 flag{fc35fdc70d5fc69d269883a822c7a53e}…

二叉树刷题Leetcode

文章目录 104.二叉树的最大深度100.相同的树965.单值二叉树 104.二叉树的最大深度 int maxDepth(struct TreeNode* root) {if(rootNULL)return 0; int left1maxDepth(root->left); int right1maxDepth(root->right); return left>right?left:right; }处理二叉树最大深…