描述:

  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. 【编程】Python3 使用自定义编码字符表解密Base64数据

    前言 Python提供了"base64"模块用于编码.解码Base64数据.但是并不是所有的Base64数据都会使用默认的字符表进行编码,所以这里对Python下实现自定义编码字符 ...

  2. 20200926--矩阵转置(奥赛一本通P95 8 多维数组)

    输入一个n行m列的矩阵A,输出它的转置(看下面说明) 输入:第1行包含两个整数n和m(1<=n<=100,1<=m<=100),表示矩阵A的行数和列数.接下来n行,每行m个整数 ...

  3. QTreewidget勾选功能

    //connect(ui->treeWidget,&QTreeWidget::itemClicked,this,&PushSelectUser::treeItemChanged) ...

  4. 在 Rime 上对输入法进行定制

    Rime Rime是什么?忘了!但是在用.而且很好用. 了解Rime历史,还是去官网吧! 定制 Rime有两个目录: 1. 程序目录 2. 用户目录 Rime 的程序目录 Windows 上 要看你安 ...

  5. IP协议数据包

    Header Length:头部长度固定20字节,永远为5(4bit为单位) Total Length:头部+包, 抓包结果 Identification.Fragment Flags.Fragmen ...

  6. web后端之表单传值

    第一种 第二种 第三种陪置web.xml文件

  7. 在虚拟机上安装CentOS6.5(minimal)

    在虚拟机上安装CentOS6.5(minimal) 2017年04月04日 09:40:38 kongmd 阅读数:2171   1.安装CentOS6.5 1.首先下载VMware ,和CentOS ...

  8. 使用 Transformers 在你自己的数据集上训练文本分类模型

    最近实在是有点忙,没啥时间写博客了.趁着周末水一文,把最近用 huggingface transformers 训练文本分类模型时遇到的一个小问题说下. 背景 之前只闻 transformers 超厉 ...

  9. 使用selemium被反爬解决方法

    使用selenium进行自动化的时候,如csdn登录时可能会遇到检测反爬,从而需要验证       1. 反爬 有时候,我们利用 Selenium 自动化爬取某些网站时,极有可能会遭遇反爬. 实际上, ...

  10. wmware桥接模式

    配置思路(桥接模式) 准备一个与PC机同网段且未被占用的IP地址 将虚拟机的网络模式修改为桥接模式(默认为NAT模式) 修改网卡配置文件,配置为准备好的IP地址,并重启网络服务. 配置DNS解析服务器 ...