描述:

  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(上)的更多相关文章

  1. PyQt5学习笔记-从主窗体打开一个子窗体

    PyQt5学习笔记-从主窗体打开一个子窗体 软件环境: Eric6+Python3.5+PyQt5 试验目标: 1.点击菜单项Open,打开一个子窗体 2.点击按钮Open,打开一个子窗体 主窗体设计 ...

  2. Python pyQt4/PyQt5 学习笔记4(事件和信号)

    信号 & 槽 import sys from PyQt5.QtCore import Qt from PyQt5.QtWidgets import (QWidget,QLCDNumber,QS ...

  3. Pyqt5学习笔记(一)

    Python已有的GUI框架: Tkinter(python内嵌的GUI环境,使用TCL实现,易学易用,方便简单创GUI自带无需安装,适用于Unix.Windows和Mac系统组,在Tk8.0的后续版 ...

  4. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  5. Python pyQt4/PyQt5 学习笔记3(绝对对位,盒布局,网格布局)

    本节研究布局管理的内容. (一)绝对对位  import sys from PyQt4 import QtGui class Example(QtGui.QWidget): def __init__( ...

  6. Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建;学习Python语言,利用Python语言来写测试用例。加油!!!

    Python+selenium测试环境成功搭建,简单控制浏览器(firefox)接下来,继续学习其他浏览器上的测试环境搭建:学习Python语言,利用Python语言来写测试用例.加油!!!

  7. 在IDEA中搭建Java源码学习环境并上传到GitHub上

    打开IDEA新建一个项目 创建一个最简单的Java项目即可 在项目命名填写该项目的名称,我这里写的项目名为Java_Source_Study 点击Finished,然后在项目的src目录下新建源码文件 ...

  8. PyTorch迁移学习-私人数据集上的蚂蚁蜜蜂分类

    迁移学习的两个主要场景 微调CNN:使用预训练的网络来初始化自己的网络,而不是随机初始化,然后训练即可 将CNN看成固定的特征提取器:固定前面的层,重写最后的全连接层,只有这个新的层会被训练 下面修改 ...

  9. Python 学习笔记(上)

    Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...

  10. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

随机推荐

  1. 【APT】响尾蛇(SideWinder)Hta文件自动解密C2

    前言 一个用于从SideWinder APT组织常用的hat文件中解密C2链接地址的Python脚本,示例代码对一些老的hat文件效果比较好,新的样本可能需要根据实际情况修改下,最初是用于对VT上命中 ...

  2. 使用SharpCompress压缩文件后把压缩的文件流传给前端

    1 SharpCompress版本 0.30.1 2 应用场景:前端传递某个标识符,如Id,查询和该Id相关联的文件,并把文件压缩,最后返回给前端.适用于压缩多个体积较小的文件,如果文件体系过大,可能 ...

  3. binlog2sql 实战心得

    原创:binlog2sql在GitHub的地址:https://github.com/danfengcao/binlog2sql 作者:danfengcao 功能:从MySQL binlog解析出你要 ...

  4. Alibaba Cloud Linux 3.2104 64位安装mysql5.6.45

    1 .安装cmake wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz tar -zxvf cmake-2.8.10.2.tar.g ...

  5. 基础实验之access/trunk/valn/vlanif/静态路由

     实验要求 1,PC1,PC2,PC3,PC4分别属于VLAN10,20,30,40 2,PC1,PC2,PC3,PC4互通 步骤1:PC1,2,3,4分别配置IP,并在SW6,SW7分别配置网关,并 ...

  6. 基于Dijkstra算法的郑州地铁路径规划

    需要引入geopy库 pip install geopy 安装即可 import requests from bs4 import BeautifulSoup import pandas as pd ...

  7. 手机设置网络代理后,网络不可用之app-jmeter性能测试

    1.检查crt证书是否安装 (手机) 2.Jmeter设置HTTP代理端口和ip与手机设置代理参数一致即可

  8. Mysql_5.7编译部署

    自述 - 概述:数据库是"按照数据结构来组织.存储和管理数据的仓库".是一个长期存储在计算机内的.有组织的.可共享的.统一管理的大量数据的集合:本文主要介绍mysql_5.7的部署 ...

  9. Servlet的学习之路

    一.什么是什么Servlet? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程 ...

  10. Mac下python2升级3

    1.下载python最新版本 链接:https://www.python.org/downloads/mac-osx/ 安装默认位置为: /Library/Frameworks/Python.fram ...