python PyQt5.QtWidgets.QWidget类

参考文章:QWidget


在这里插入图片描述
在这里插入图片描述

详细说明

widget是用户界面的原子:它从窗口系统接收鼠标,键盘和其他事件,并将其自身绘制在屏幕上。 每个widget都是矩形的,并且按z-order排序。 widget会被其父级及其前面的widget裁剪。

未嵌入父widget中的widget被称为窗口。 通常,窗口具有框架和标题栏,尽管也可以使用适当的窗口flag来创建没有这种修饰的窗口。 在Qt中,QMainWindow和QDialog的各种子类是最常见的窗口类型。

每个widget的构造函数都接受一个或两个标准参数:

  • QWidget * parent = \ nullptr是新widget的父级。 如果它是None(默认值),则新的widget将是一个窗口。 如果不是,它将是父级的子级,并且受父级的几何形状限制(除非您将Window指定为window flag)。

  • Qt :: WindowFlags f = 0(如果有)设置窗口flag; 默认值几乎适用于所有widget,但是要获取例如没有窗口系统框架的窗口,必须使用特殊flag。

QWidget有许多成员函数,但是其中一些没有直接的功能。 例如,QWidget具有font属性,但从未使用过它。 有许多子类提供了真正的功能,例如QLabel,QPushButton,QListWidget和QTabWidget。

事件

窗口小部件响应通常由用户操作引起的事件。 Qt通过使用包含有关每个事件信息的QEvent子类的实例调用特定的事件处理函数来将事件传递给窗口小部件。

如果您的窗口小部件仅包含子窗口小部件,则可能不需要实现任何事件处理程序。 如果您想在子窗口小部件中检测到鼠标单击,请在窗口小部件的mousePressEvent()中调用子窗口的underMouse()函数。

Scribble示例实现了一系列事件,以处理鼠标移动,按钮按下和窗口大小调整。

您将需要提供自己的窗口小部件的行为和内容,但是这里是与QWidget相关的事件的简要概述,从最常见的事件开始:

  • 每当需要重新绘制小部件时,都会调用paintEvent()。每个显示自定义内容的小部件都必须实现它。使用QPainter的绘画只能在paintEvent()或paintEvent()调用的函数中进行。

  • 调整窗口小部件的大小后,将调用resizeEvent()。

  • 当鼠标光标在窗口小部件内时,或者当窗口小部件使用grabMouse()抓住鼠标时,按下鼠标按钮将调用mousePressEvent()。在不释放鼠标的情况下按下鼠标,实际上与调用catchMouse()相同。

  • 释放鼠标按钮时,将调用mouseReleaseEvent()。小部件在收到相应的鼠标按下事件时会收到鼠标释放事件。这意味着,如果用户在小部件内按下鼠标,然后在释放鼠标按钮之前将鼠标拖到其他位置,则小部件会收到释放事件。有一个例外:如果在按住鼠标按钮的同时出现弹出菜单,则该弹出窗口会立即窃取鼠标事件。

  • 当用户双击窗口小部件时,将调用mouseDoubleClickEvent()。如果用户双击,则小部件会收到一个鼠标按下事件,一个鼠标释放事件,(一个鼠标点击事件),第二次鼠标按下,该事件以及最后一个第二次鼠标释放事件。 (如果在此操作期间鼠标未保持稳定,则可能还会收到一些鼠标移动事件。)在第二次单击到达之前,无法将单击与双击区分开。 (这就是为什么大多数GUI书籍都建议双击是单击的扩展,而不是触发其他操作的原因之一。)

接受键盘输入的小部件需要重新实现一些事件处理程序:

  • 每当按下某个键时,就会调用keyPressEvent();按住该键的时间足以使其自动重复时,会再次调用keyPressEvent()。 Tab和Shift + Tab键仅在焦点更改机制未使用时才传递给小部件。要强制这些键由您的小部件处理,必须重新实现event()。

  • 当窗口小部件获得键盘焦点时会调用focusInEvent()(假设您已调用setFocusPolicy())。行为良好的小部件表示它们以清晰但谨慎的方式拥有键盘焦点。

  • 当小部件失去键盘焦点时,将调用focusOutEvent()。

您可能还需要重新实现一些不太常见的事件处理程序:

  • 只要在按住鼠标按钮的同时移动鼠标,就会调用mouseMoveEvent()。这在拖放操作期间很有用。如果调用setMouseTracking(true),即使没有按下任何按钮,也将获得鼠标移动事件。 (另请参见拖放指南。)

  • 每当释放键并按住键时(如果键是自动重复的),都会调用keyReleaseEvent()。在这种情况下,小部件每次重复都会收到一对按键释放和按键事件。 Tab和Shift + Tab键仅在焦点更改机制未使用时才传递给小部件。要强制这些键由您的小部件处理,必须重新实现event()。

  • 每当用户在小部件具有焦点的情况下转动鼠标滚轮时,就会调用wheelEvent()。

  • 当鼠标进入小部件的屏幕空间时,将调用enterEvent()。 (这不包括小部件的任何子级拥有的屏幕空间。)

  • 当鼠标离开窗口小部件的屏幕空间时,将调用LeaveEvent()。如果鼠标进入子窗口小部件,则不会导致LeaveEvent()。

  • 当窗口小部件已相对于其父级移动时,将调用moveEvent()。

  • 当用户关闭窗口小部件时(或调用close()时),将调用closeEvent()。

Type文档中还描述了一些相当模糊的事件。 要处理这些事件,您需要直接重新实现event()。

event()的默认实现处理Tab和Shift + Tab(以移动键盘焦点),并将其他大多数事件传递给上述更专业的处理程序之一。

事件及其传递机制在事件系统中介绍。

类参数:

class QWidget([parent=None[, f=Qt.WindowFlags()]])
param f
WindowFlags

param parent
QWidget

构造一个小部件,它是父级的子级,并将小部件标志设置为f。

如果parent为None,则新窗口小部件将成为一个窗口。 如果parent是另一个小部件,则此小部件将成为parent内的子窗口。 删除其父项时,将删除新的窗口小部件。

小部件标志参数f通常为0,但可以将其设置为自定义窗口框架(即parent必须为None)。 要自定义框架,请使用由任何窗口标志的按位“或”组成的值。

如果将子窗口小部件添加到已经可见的窗口小部件,则必须显式显示子窗口以使其可见。

请注意,Qt的X11版本可能无法在所有系统上提供样式标志的所有组合。 这是因为在X11上,Qt只能询问窗口管理器,并且窗口管理器可以覆盖应用程序的设置。 在Windows上,Qt可以设置所需的任何标志。

WindowFlags

这个flags还真不知道咋设置。。。

在这里插入图片描述
老报黄,设置flags=0flags=None都不对

示例

# -*- coding: utf-8 -*-
"""
@File    : test.py
@Time    : 2020/4/1 19:24
@Author  : Dontla
@Email   : sxana@qq.com
@Software: PyCharm
"""
import sys
from PyQt5.QtWidgets import QApplication, QWidget

app = QApplication(sys.argv)  # 实例化一个应用对象
w = QWidget()  # 窗口界面的基本控件,它提供了基本的应用构造器。默认情况下,构造器是没有父级的,没有父级的构造器被称为窗口(window)。
w.show()  # 让控件在桌面上显示出来。控件在内存里创建,之后才能在显示器上显示出来。
sys.exit(app.exec_())  # 确保主循环安全退出

结果:
在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dontla

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值