python之pyqt专栏10-键盘事件

需求

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

UI界面设计

代码 

# 导入sys模块
import sysfrom PyQt6.QtCore import Qt
# PyQt6.QtWidgets模块中导入QApplication, QWidget
from PyQt6.QtWidgets import QApplication, QWidget# untitled模块中导入Ui_Form类
from untitled import Ui_Formclass 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):# 获取当前位置passdef 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 - 5print(f"left:{self.btnx}")elif (a0.key() == Qt.Key.Key_Right):self.btnx = self.btnx + 5print(f"left:{self.btnx}")elif (a0.key() == Qt.Key.Key_Up):self.btny = self.btny - 5elif (a0.key() == Qt.Key.Key_Down):self.btny = self.btny + 5else:passself.pushButton.move(self.btnx, self.btny)# Press the green button in the gutter to run the script.
if __name__ == '__main__':# 实例化应用app = QApplication(sys.argv)# 实例化MyMainFormmyw = 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 - 5print(f"left:{self.btnx}")elif (a0.key() == Qt.Key.Key_Right):self.btnx = self.btnx + 5print(f"left:{self.btnx}")elif (a0.key() == Qt.Key.Key_Up):self.btny = self.btny - 5elif (a0.key() == Qt.Key.Key_Down):self.btny = self.btny + 5else:pass

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

         移动按钮位置

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

        结果

        

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跳表的基础

跳表的作用 无需数组查找目标元素-----从头遍历---O(n); 有序数组查找目标元素-----二分查找---O(logn); 链表查找目标元素----------只能从头遍历---O(n); 那么链表要如何实现O(logn)的查找时间复杂度呢-----跳表。 跳表的定义 有序链表多级索引跳表 就是一个多级链表 …

css小技巧 linear-gradient

设计图&#xff1a; 现在的要求是不准用图片&#xff0c;好吧&#xff0c;那就用代码简单实现下。 方式1&#xff1a;svg <svg xmlns"http://www.w3.org/2000/svg" version"1.1"><rect x"-30" y"1" rx"8" ry&quo…

栈实现队列,力扣

题目地址&#xff1a; 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 难度&#xff1a;简单 今天刷栈实现队列&#xff0c;大家有兴趣可以点上看看题目要求&#xff0c;试着做一下。 题目&#xff1a; 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支…

xilinx系列FPGA基于VIVADO的pin delay列表生成说明

目录 1 概述2 示例平台3 操作说明4 注意事项 xilinx系列FPGA基于VIVADO的pin delay列表生成说明 1 概述 本文用于讲诉xilinx系列FPGA基于VIVADO的pin delay列表生成说明&#xff0c;以及一些注意事项&#xff0c;为FPGA设计人员探明道路。 Pin delay 即FPGA内部die到pin的延时…

ios 长传发布审核+safari浏览器,直接安装ipa文件

蒲公英二维码方法 个人开发者账号发布证书AD-hoc 描述文件蒲公英上传链接通过苹果safari 浏览器下载IPA包 浏览器下载方法 前置条件 1.下载 ipa 包的设备的 uuid 已加入 苹果测试设备列表如何添加到测试列表 2.web 服务, 文件服务. 3.需要AD-hoc 描述文件 添加链接描述 1.创…

java实验:数据库应用(idea+mysql+php)

设计用户注册和登录界面&#xff0c;实现用户注册和登录操作。 设计用户注册/登录界面;使用工具在MySQL中创建user表&#xff0c;包括学号、姓名、密码、专业、班级&#xff1b;实现注册操作&#xff1a;在user表中插入一条新纪录&#xff0c;但学号不能重复&#xff1b;实现登…

边缘数据中心和5G的融合彻底改变数据传输和物联网

伴随着数字化时代的飞速发展&#xff0c;边缘数据中心和5G技术的联袂崛起&#xff0c;正深刻塑造着人们对数据的创造、传输和处理方式。据Gartner公司的预测&#xff0c;到2025年&#xff0c;企业数据的三分之二将在边缘计算设施中涌现&#xff0c;而非传统的集中式数据中心。这…

如何在 Ubuntu 22.04中安装 Docker Compose

1 安装 pip # 下载get-pip.py脚本 wget https://bootstrap.pypa.io/pip/3.10/get-pip.py 或者 # 下载最新版本 curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py# 为 Python 3 安装 pip sudo python3 get-pip.py2 安装 Pip 后&#xff0c;运行以下命令安装 Doc…

JavaScript 数据结构

JavaScript 数据结构 目录 JavaScript 数据结构 一、标识符 二、关键字 三、常量 四、变量 每一种计算机编程语言都有自己的数据结构&#xff0c;JavaScript脚本语言的数据结构包括&#xff1a;标识符、常量、变量、保留字等。 一、标识符 标识符&#xff0c;说白了&…

macos pycharm调试airflow代码

项目目录&#xff1a;本案例基于pycharm项目虚拟环境 1.进入项目虚拟环境目录 yololibogon bin % pwd /Users/yololi/PycharmProjects/pythonProjecttest/venv/bin 2.安装airflow ./python3.8 -m pip install apache-airflow2.2.5 -i https://pypi.tuna.tsinghua.edu.cn/sim…

Vmware安装Centos7

CentOs7镜像文件下载 centos7 镜像文件下载-CSDN博客 配置虚拟机 打开Vmware&#xff0c;点击新建虚拟机 典型安装与自定义安装 典型安装&#xff1a;VMware会将主流的配置应用在虚拟机的操作系统上&#xff0c;对于新手来很友好。 自定义安装&#xff1a;自定义安装可以针…

柱状展示当中 ,如何给每个位置加多个项的办法

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>双柱修改</title> <script src"https://cdn.staticfile.org/Chart.js/3.9.1/chart.js"></script> </head> <body><canvas i…