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

结果:

python PyQt5.QtWidgets.QWidget类相关推荐

  1. python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)

    官方文档 class QApplication QApplication(arg__1) Parametersarg__1 – list of strings QApplication专为QGuiAp ...

  2. python PyQt5 QtWidgets.QWidget.setLayout()(将布局中的小部件重新父级化,以将窗口作为父级)

    https://doc.qt.io/qtforpython/PySide2/QtWidgets/QWidget.html?highlight=setlayout#PySide2.QtWidgets.P ...

  3. python PyQt5 QtWidgets.QWidget.size()函数 QSize

    查官方文档,跳到了QSize https://doc.qt.io/qtforpython/PySide2/QtWidgets/QWidget.html?highlight=size#PySide2.Q ...

  4. python PyQt5.QtWidgets.QWidget.mouseMoveEvent()函数

    文章目录 官方介绍 官方介绍 https://doc.qt.io/qtforpython/PySide2/QtWidgets/QWidget.html?highlight=mousemoveevent ...

  5. python PyQt5 QtWidgets.QAbstractSlider类(QScrollBar,QSlider和QDial之类的小部件的公共超类)

    https://doc.qt.io/qtforpython/PySide2/QtWidgets/QAbstractSlider.html?highlight=valuechanged#qabstrac ...

  6. python读取 application_python PyQt5.QtWidgets.QApplication类(sys.argv)(app应用对象类)...

    class QApplication QApplication(arg__1) Parameters arg__1 – list of strings QApplication专为QGuiApplic ...

  7. python PyQt5 QtWidgets.QAbstractSlider.valueChanged()

    https://doc.qt.io/qtforpython/PySide2/QtWidgets/QAbstractSlider.html?highlight=valuechanged#PySide2. ...

  8. python PyQt5 QtCore.QPointF类、QPointF类与QPoint类区别

    文章目录 官方文档 QPointF类与QPoint类区别 官方文档 https://doc.qt.io/qtforpython/PySide2/QtCore/QPointF.html?highligh ...

  9. python PyQt5.QtWidgets.QApplication().exec_()函数 QCoreApplication.exec_()(进入主事件循环并等待直到调用exit()为止)

    搜索的时候没找着QApplication().exec_()函数,用QCoreApplication.exec_()替代一下? 链接:https://doc.qt.io/qtforpython/PyS ...

最新文章

  1. 惠普HP unix命令大全
  2. 机器学习算法优缺点改进总结
  3. 主持人李咏在美国去世 妻子哈文:永失我爱
  4. leetcode 旋转数组
  5. 小程序showModal 可配置文字
  6. 元胞机模拟量子计算机,我国量子计算和量子模拟研究取得新突破
  7. python 字符串加密 唯一数字_python实现字符串加密 生成唯一固定长度字符串
  8. html文件用的那个版本,html – 使用Django进行静态文件版本控制
  9. 8.python之面相对象part.6(反射__call__,__setattr__,__delattr__,__getattr__)
  10. 第四季-专题2-U-Boot新手入门
  11. 114.二叉树展开为链表
  12. muse计算机术语,muse2.7制谱软件使用教程.doc
  13. CameraLink简介
  14. android吃鸡闪退,绝地求生刺激战场iPhone6/6P闪退怎么办
  15. Latex论文写作各种小问题
  16. 笔记本显示宽带无法连接服务器,笔记本电脑连接不上网络怎么解决
  17. 语音、图像和视频数据的格式
  18. 基于python的学生信息管理系统文献综述_学生信息管理系统的文献综述
  19. 分享 | 全职在家工作/读书应该如何保持效率
  20. 手机里tencent文件夹能删吗_【我要删除tencent文件夹】手机删了tencent文件夹_tencent什么文件夹...

热门文章

  1. 应用maven的感想
  2. java servlet例子_Servlet学习教程(三)---- 一个简单的Servlet例子
  3. PP模块入门考试试题,看看能得多少分吧!
  4. SAP License管理
  5. 47、Power Query-处理典型的中国式二维表格转一维
  6. SAP ERP差异来源和差异处理
  7. SAP中寻找增强的实现方法
  8. SAP移动战略与HANA已为BI爆发做好准备
  9. ABAP实例之ALV
  10. js输出一个菱形_Webpack 4入口、输出和ES6模块