PyQt5学习 (2)--QWidget(上)
描述:
1.所有可视控件的基类
2.是一个最简单的空白控件
3.控件时用户界面的最小元素:接收各种事件、绘制在桌面上,展示给用户看
4.每个控件都是矩形的,它们按Z轴顺序排序
5.控件由其父控件和前面的控件剪切

6.没有父控件的控件,称之为窗口(如上图中的window):
(1).一般会被包装一个框架
(2).可以通过某些设置修改
QWidget.__bases__
查看其父类
QWidget.mro()
查看其父类以及父类的父类以及。。。
控件的创建

坐标系统

尺寸的相关操作
1.尺寸获取

2.尺寸设置

3.尺寸限定

限定了尺寸之后,不能再通过resize改变超出范围的大小
4.内容边距

鼠标的相关操作
1.设置鼠标形状QWidget.setCursor()


自定义鼠标:

移动到窗口内,鼠标就变成了可爱的Madeline

2.重置形状、获取鼠标
点击查看代码
window.unsetCursor() # 重置鼠标对象
print(window.cursor())
current_cursor = window.cursor() # 获取鼠标对象
current_cursor.setPos(100, 100) # 设置鼠标位置
print(current_cursor.pos())
鼠标被移动到了屏幕(100,100)的位置
3.鼠标跟踪
点击查看代码
class MyWindow(QWidget):
def mouseMoveEvent(self, me):
QMouseEvent
print("鼠标移动了", me.globalPos()) # 相对于屏幕的位置
print("鼠标移动了", me.localPos()) # 相对于窗口的位置
点击查看代码
window.setMouseTracking(True) # 设置鼠标跟踪
print(window.hasMouseTracking()) # 检测鼠标是否跟踪

想在类里调用类外的控件,可以用findChild主动查找
事件消息
点击查看代码
def showEvent(self, QShowEvent): # 展示事件,控件显示时调用
print("窗口被展示了")
def closeEvent(self, QCloseEvent): # 关闭事件
print("窗口被关闭了")
def moveEvent(self, QMoveEvent): # 窗口移动事件
print("窗口被移动了")
def resizeEvent(self, QResizeEvent): # 窗口尺寸改变
print("窗口改变了尺寸大小")
def enterEvent(self, QEvent): # 鼠标进入窗口
print("鼠标进来了")
self.setStyleSheet("background-color: cyan;")
def leaveEvent(self, QEvent): # 鼠标离开窗口
print("鼠标移开了")
self.setStyleSheet("background-color: yellow;")
def mousePressEvent(self, QMouseEvent):
print("鼠标被按下")
def mouseReleaseEvent(self, QMouseEvent):
print("鼠标被释放")
def mouseDoubleClickEvent(self, QMouseEvent):
print("鼠标双击")
def mouseMoveEvent(self, QMouseEvent):
print("鼠标移动了")
def keyPressEvent(self, QKeyEvent):
print("键盘上某一个按键被按下")
def keyReleaseEvent(self, QKeyEvent):
print("键盘上某一个按键被释放了")
def focusInEvent(self, QFocusEvent): # 失去焦点时使用
print("")
def focusOutEvent(self, QFocusEvent): # 获取焦点时使用
print("")
def dragEnterEvent(self, QDragEnterEvent): # 拖拽进入控件 ,还有leave、move和drop
pass
def paintEvent(self, QPaintEvent): # 绘制事件
pass
def changeEvent(self, QEvent): # 窗体改变、字体改变时使用
pass
def contextMenuEvent(self, QContextMenuEvent): # 访问右键菜单
pass
事件转发机制
空间内对某个事件没有处理方式,就会转移到父控件

按钮本身对点击事件已经处理过了,所以不会打印一些东西,即不会上传,而label并没有对点击事件的处理,所以会上传
点击查看代码
class Label(QLabel):
def mousePressEvent(self, evt):
print("标签控件被按下")
# evt.accept() # 标识已处理
print(evt.isAccepted()) # 确认是否处理
evt.ignore() # 标识被忽略
案例:
修饰键:ctrl、alt等等
普通键:abcd123等等
label = QLabel(window)
label.grabKeyboard():
# 使label监听键盘发送的消息
点击查看代码
def keyPressEvent(self, evt):
print("键盘上某一个按键被按下")
if evt.key() == Qt.Key_Tab:
print("用户点击了Tab键位")
if evt.modifiers() == Qt.ControlModifier | Qt.ShiftModifier and evt.key() == Qt.Key_S:
print("ctrl+shift+s被点击了")
窗口移动懒得搞,暂时用不上
大概步骤:确定点击位置前后的坐标,根据前后座标确定鼠标移动的距离,最后使用move移动相应距离(实时拖动和两次拖动有区别,主要还是有没有在鼠标松开加一个判断)
父子关系

点击查看代码
print(window.childAt(55, 55)) # 检查该坐标位置的子控件,返回值是对应的控件
print(label2.parentWidget()) # 确认指定控件的父控件
print(window.childrenRect()) # 子控件所占位置组成的边界矩形
PyQt5学习 (2)--QWidget(上)的更多相关文章
- PyQt5学习笔记-从主窗体打开一个子窗体
PyQt5学习笔记-从主窗体打开一个子窗体 软件环境: Eric6+Python3.5+PyQt5 试验目标: 1.点击菜单项Open,打开一个子窗体 2.点击按钮Open,打开一个子窗体 主窗体设计 ...
- Python pyQt4/PyQt5 学习笔记4(事件和信号)
信号 & 槽 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QWidget,QLCDNumber,QS ...
- Pyqt5学习笔记(一)
Python已有的GUI框架: Tkinter(python内嵌的GUI环境,使用TCL实现,易学易用,方便简单创GUI自带无需安装,适用于Unix.Windows和Mac系统组,在Tk8.0的后续版 ...
- MVC&WebForm对照学习:文件上传(以图片为例)
原文 http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页:: :: :: ::管理 5 Posts :: 0 ...
- Python pyQt4/PyQt5 学习笔记3(绝对对位,盒布局,网格布局)
本节研究布局管理的内容. (一)绝对对位 import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__( ...
- Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!
Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!
- 在IDEA中搭建Java源码学习环境并上传到GitHub上
打开IDEA新建一个项目 创建一个最简单的Java项目即可 在项目命名填写该项目的名称,我这里写的项目名为Java_Source_Study 点击Finished,然后在项目的src目录下新建源码文件 ...
- PyTorch迁移学习-私人数据集上的蚂蚁蜜蜂分类
迁移学习的两个主要场景 微调CNN:使用预训练的网络来初始化自己的网络,而不是随机初始化,然后训练即可 将CNN看成固定的特征提取器:固定前面的层,重写最后的全连接层,只有这个新的层会被训练 下面修改 ...
- Python 学习笔记(上)
Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
随机推荐
- JAVA第四五次大作业及期中考试总结
21201411-李英涵 继承与多态blog2 前言: 期中考试的题目还可以,因为给了类图,但是难度也逐渐升高. pta中的四的第一题和第三题较为简单,因为第一题的正则 ...
- C#中的范围类型(Range Type)
//语法糖Rangestatic void Main(string[] args) { var myArray = new string[] { "Item1", "It ...
- 用python提取txt文件中的特定信息并写入Excel
这个是用 excel里面的 去掉空格最后导出的一个list: 原本是有空格的 后面是抵消了中间的空格. 然后 这里侧重说一下什么是split()函数 语法:str.split(str="&q ...
- [fiddler的使用]添加常用字段(请求耗时,客户端请求时间,IP地址)
1. /* 显示请求耗时 */ function BeginRequestTime(oS: Session) { if (oS.Timers != null) { return oS.Timers.C ...
- vue3.0+vite按需引入element plus
1.安装vite-plugin-style-import yarn add vite-plugin-style-import -D 2.在项目根目录下的vite.config.js中配置 import ...
- [CQOI2014]通配符匹配 题解
第一眼:什么鬼东西ヾ(。`Д´。) 第二眼:显然,这道题要分段处理 类似[TJOI2018]碱基序列\ (建议做一做也是Hash+DP)\ 那你怎么第一眼没看出来 Hash处理+DP==AC 直接上代 ...
- 设计模式 (Design Pattern)C# -- 简介
简介 设计模式(Design Pattern)是对面向对象设计中反复出现的问题的解决方案. 设计模式代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用. 设计模式是软件开发人员在软件开发过程 ...
- C语言中分治的思想-位运算
(1) 有101个整数,其中有50个数出现了两次,1个数出现了一次, 找出出现了一次的那个数. 位运算的思想:任何数和零异或得到自己,任何数自己异或得到0. eg1.{2,1,5,1,2,2} num ...
- C语言中字符数组的赋值和复制
/*C中,字符串,即字符数组的赋值与字符变量.常量.变量的赋值是不同的.初学者总会犯错误. 常见错误如下: 1.定义的时候直接用字符串赋值 char a[10]; char a[10]="h ...
- C/C++ 数据结构链式队列的定义与实现
#include <iostream> #include <Windows.h> using namespace std; typedef struct _QNode{ int ...