【超详细教程】PyQt学习(三)QWidget介绍

概述

大家好,我们的gzh是朝阳三只大明白,满满全是干货,分享近期的学习知识以及个人总结(包括读研和IT),跪求一波关注,希望和大家一起努力、进步!!

image.png

QWidget 类是所有 Qt GUI 界面类的基类,是 PyQt 程序中的最小元素,也就是所有可现实的控件的基类。一个继承自 QWidget 的类可以在屏幕上绘制自身,这是因为 QWidget 继承了 QPaintDevice 类,该类用于将控件绘制在屏幕上。每一个可视控件都是矩形的且都按 Z 顺序排序,一个空间的显示会被自己的父类(指定的 parent)和其他控件进行阻挡。

未嵌入到窗口的可视控件称之为窗口,例如 QDialog 和 QMainWindow。

重要属性和功能

位置和大小

QWidget 类最重要的功能是提供了控件的显示,显示依赖于两个属性位置和大小,在 PyQt 框架中,控件坐标系统以左上角为原点,向右为 X 轴的正方向,向下为 Y 轴正方向建立。

每个控件都有一个边框,因此在高度、位置的设置和获取上,都有两种方式,即包含边框和不包含边框。

包含框架的位置获取方法:

  • x():获取相对于父控件的 X 位置(没有父控件则相对于桌面);
  • y():相对于父控件的 Y 位置(没有父控件则相对于桌面);
  • pos():x 和 y 的组合方法,返回QPoint对象。

不包含框架的位置获取方法:

  • geometry().x():获取相对于父控件的 X 位置;
  • geometry().y():获取相对于父控件的 Y 位置;
  • geometry():获取用户区域相对于父控件的位置和尺寸。

包含框架的大小获取方法:

  • frameGeometry().width():获取控件的宽度;
  • frameGeometry().height():获取控件的高度;
  • frameGeometry():获取控件尺寸。

不包含框架的大小获取方法:

  • width():获取控件的宽度;
  • height():获取控件的高度;
  • rect():获取控件宽高。

设置位置和大小

  • resize():设置控件的大小(不包含边框);
  • move():移动控件(包括框架);
  • setFixedSize():设置控件固定尺寸。

除了直接给定控件大小,还可以设置大小的上下限,相关方法介绍如下:

  • minimumwidth():获取最小宽度;
  • minimumheight():获取最小高度;
  • minimumsize():上面两个方法的结合;
  • maxmumwidth():获取最小宽度;
  • maxmumheight():获取最小高度;
  • maxmumsize():上面两个方法的结合方法。

控件层级

没有父窗口小部件的窗口小部件始终是一个独立窗口,对于这些控件,可以调用 setWindowTitle()setWindowIcon() 设置标题栏和图标。QWidget 类本身提供了这些方法,但是如果不是顶级控件,调用这些方法会失效。如下图所示,QGroupBox是父控件,其余的 QLabelQDateEdit 等控件都受它的管理。

image.png

子控件的生命周期和父控件一致,在创建任何一个控件的时候传递一个 QWidget 子类实例作为新创建的控件的父控件。例如 self.widget_2 = QtWidgets.QWidget(self.centralwidget),在 QWidget 类中提供了几个方法用于管理父子关系

  • childAt():获取在指定坐标位置的子控件;
  • parentWidget():获取指定控件的父控件;
  • childreanRect():获取所有子控件组成的边界矩形。

除了这种父子的层级关系,控件之间在 Z 轴上还有一种层级关系,QWidget 提供了一些方法用来管理这种关系:

  • lower():将控件放到最底层;
  • raise():将控件放到最上层;
  • a.stackunder(b):将 a 控件放到指定控件 b 之下。

绘制自定义控件

由于 QWidgetQPaintDevice 的子类,因此子类可使用 QPainter 类的实例使用一系列绘画操作,所以如果想要创建自己的控件,最好继承自 QWidget 类。

每一个控件都有一个 paintEvent() 方法,在这个函数中执行所有的绘制操作,每当需要重绘控件的时候都会调用该方法。一般的处理方案如下:

def paintEvent(self, a0: QPaintEvent) -> None:  
    ... # 自定义操作
    super(MainWindow, self).paintEvent(a0)

控件尺寸

除了直接指定大小、最大、最小长宽之外,QWidget 还提供了尺寸策略,这个主要用于在布局情况下,多个子控件之间的大小调整,尺寸策略的可选值如下:

image.png

默认情况下,顶级控件的大小被限制为桌面高度和宽度的 23\frac{2}{3}32​ 。

事件

在 PyQt 中控件和用户的交互一般通过事件,有一个消息队列不断接收程序产生的事件信息,并将其包装为QEvent对象进行分发处理。针对不同类型的QEvent对象,每个控件都有对应的处理函数,比方说 moveEvent() 用于处理窗口移动事件;enterEvent() 用于处理鼠标光标进入事件。

焦点和交互

控制状态就是获取焦点的状态,一个控件只有获取了焦点的控件才能进行交互,针对焦点,QWidget 提供了如下函数进行管理;

  • setFocus():指定控件获取焦点;
  • setFocusPolicy():设置获取焦点的策略;
  • focuswidget():获得子控件中当前聚焦的控件;
  • focusNextChild():聚焦下一个子控件;
  • setTabOrder():设置子控件获取焦点的顺序。

针对交互,QWdiget 也提供了相应的方法:

  • setEnabled():指定控件是否可用;
  • isEnabled():返回控件是否可用;
  • isvisible():代表了控件的最终状态,即使被其他控件遮挡也算看的见;
  • isHidden():代表该控件是否对父控件可见。
---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值