注册 登录

清河洛

pyside中的组件基类QWidget

qingheluo2024-10-29清河洛285
在PySide6.QtWidgets模块中,定义了上百种在GUI开发中可能用到的组件,所有的组件都是继承自QtWidgets.QWidget类没有父组件的组件始终是一个独立的窗口(顶级组件)。对于这些组件,setWindowTitle() 和 setWindowIcon() 分别设置标题栏和图标组件中的常用类QtCore.QSize 表示拥有宽和高的尺寸,QSize(w,h) QtCore.QPoint 表示一个组件的左上角基于其父组件的坐标,QPoint(x,y) QtCore.QPointF 使用更精准的浮点数表示左上角坐标 QtCore.QRect 表示一个指定尺...

在PySide6.QtWidgets模块中,定义了上百种在GUI开发中可能用到的组件,所有的组件都是继承自QtWidgets.QWidget类

没有父组件的组件始终是一个独立的窗口(顶级组件)。对于这些组件,setWindowTitle() 和 setWindowIcon() 分别设置标题栏和图标

组件中的常用类

QtCore.QSize    表示拥有宽和高的尺寸,QSize(w,h)
QtCore.QPoint   表示一个组件的左上角基于其父组件的坐标,QPoint(x,y)
QtCore.QPointF  使用更精准的浮点数表示左上角坐标
QtCore.QRect    表示一个指定尺寸指定位置的区域,其实就是QPoint和QSize的整合
                QRect(topleft_QPoint, bottomright_QPoint)
                QRect(topleft_QPoint, QSize)
                QRect(left, top, width, height)
QtCore.QMargins 表示一个组件的内容区域的内边距,QMargins(left, top, right, bottom)
QtGui.QIcon     表示一个用于显示图标的资源,QtGui.QIcon(fileName)
QtGui.QFont     表示一个用于渲染的字体资源,QtGui.QFont(name_list,pointSize=12, weight=400, italic=False)
                字体宽度值为100-900的整百数

组件中的常用常量

KeyboardModifier    修饰按键,表示一个事件发生时同时按下的按键
        Qt.NoModifier       未按下修饰键
        Qt.ShiftModifier    Shift键
        Qt.ControlModifier  Ctrl 键
        Qt.AltModifier      Alt  键
        Qt.MetaModifier     Meta 键

QCursor              鼠标手势
        Qt.ArrowCursor         正常
        Qt.PointingHandCursor  点击的小手
        Qt.ForbiddenCursor     禁用
        Qt.WaitCursor          等待
        Qt.BusyCursor          忙碌
        Qt.OpenHandCursor      手展开
        Qt.ClosedHandCursor    手握紧

MouseButton         鼠标的按键
        Qt.NoButton 没有任何按键
        Qt.AllButtons任意键。用于设置 MouseArea 的 'acceptedButtons' 属性以接受所有鼠标按钮。
        Qt.LeftButton 左键
        Qt.RightButton右键
        Qt.MiddleButton中键
        Qt.BackButton   /XButton1/ExtraButton1  返回键
        Qt.ForwardButton/XButton2/ExtraButton2  前进键
        Qt.TaskButton            /ExtraButton3   任务键
        Qt.ExtraButton4-24       预定义的其他按键

Key                 表示键盘按键,常用的有
        Qt.Key_F1-35   Qt.Key_A-Z       Qt.Key_0-9、
        Qt.Key_Enter   Qt.Key_Shift     Qt.Key_Control    Qt.Key_Alt
        Qt.Key_Space   Qt.Key_Tab       Qt.Key_Backspace  Qt.Key_Delete
        Qt.Key_Meta    Qt.Key_CapsLock  Qt.Key_Escape     Qt.Key_ScrollLock
        Qt.Key_Insert  Qt.Key_Pause     Qt.Key_NumLock    Qt.Key_Menu
        Qt.Key_Home    Qt.Key_End       Qt.Key_PageUp     Qt.Key_PageDown
        Qt.Key_Up      Qt.Key_Down      Qt.Key_Left       Qt.Key_Right
        Qt.Key_Print   Qt.Key_Help      Qt.Key_Plus       Qt.Key_Equal

组件的属性基本上均采用驼峰命名,且为只读属性,但是pyside为我们提供了几乎所有属性的setter和getter

getter基本上就是属性名的直接调用,setter是在之前添加set字符并转化为驼峰命名

如baseSize属性的getter为baseSize(),setter为setBaseSize()

继承自QtCore.QObject的常用方法

objectName()、setObjectName(name)  获取和设置对象名称
findChild(class, name)    根据名称name获取指定的类class实例对象
        如  findChild(QPushButton, "child_button")
isWidgetType()      实例对象的类是否继承自QtWidgets.QWidget
isWindowType()      示例对象是否是顶级窗口
installEventFilter(filterObj)
removeEventFilter(filterObj)
        安装和删除事件过滤器
        filterObj为一个QtCore.QObject对象
        filterObj通过其eventFilter()函数接收事件,返回True表示过滤该事件true
        如果同时安装了多个事件过滤器,按照后进先出的原则激活

对象相关

childAt(p)              QPoint/x,y 获取组件自身坐标系中点p处的可见子组件
focusNextChild()        判断当前状态是否可以使用tab键查找到下一个具有键盘焦点事件的子组件
nativeParentWidget()    返回此组件的具有系统标识符的父级组件
setParent(parent)       将此组件放置于指定父组件内,默认位置为0,0
parentWidget()          返回此组件的父级组件
focusWidget()           获取可获得键盘焦点的子组件对象
                        如果此组件为顶级窗口,返回当该窗口激活时获得焦点的组件
                        如果不为顶级窗口,返回该组件的子组件中最后一个可获得键盘焦点的子组件对象
nextInFocusChain()      返回此组件焦点链中的下一个组件
previousInFocusChain()  返回此组件焦点链中的上一个组件
destroy()               释放系统资源,会销毁组件所在窗口及该窗口下所有组件

信息相关

accessibleDescription   str,组件描述
accessibleNameᅟ        str,组件名称
windowIcon              QIcon,组件的图标
windowOpacity           float,窗口的不透明度,1.0(完全不透明)到 0.0(完全透明)
windowTitle             str,窗口标题
                        windowTitleChanged(title)

顶级窗口相关

isWindow()              是否为顶级窗口
window()                返回该组件所在的顶级窗口组件
effectiveWinId()        返回该组件所在顶级窗口的系统标识符,该标识符可能会在运行时更改
winId()                 返回组件所在窗口的系统标识符
sizeIncrement           QSize,当调整窗口大小时的增量
frameGeometry           QRect,顶级窗口的区域信息,无setter
frameSizeᅟ             QSize,顶级窗口大小,无setter
isActiveWindow          此组件的窗口是否为活动窗口,setter为activateWindow()
activeWindow()          返回具有键盘输入焦点的应用程序顶级窗口
lower()                 将窗口组件降低到堆栈底部,会被任何重叠的同级窗口对象遮挡
move(p)                 QPoint/x,y  移动到p位置

键盘鼠标相关

cursorᅟ                光标形状,unsetCursor()重置鼠标手势
focus                   bool(false),是否具有键盘输入焦点,getter为hasFocus()
setFocus()              不传参数表示设置此组件获得焦点(此组件或其父窗口之一必须为当前活动窗口)
focusPolicy             此组件接受键盘焦点的方式
        Qt.TabFocus     仅通过tab按键
        Qt.ClickFocus   仅通过鼠标点击
        Qt.StrongFocus  通过tab按键和鼠标点击
        Qt.NoFocus      不接受键盘焦点
underMouse()            鼠标光标是否在组件中

位置大小相关

baseSizeᅟ              QSize,组件基准大小
childrenRect            QRect,内容区域大小,无setter
minimumSize             QSize,组件最小尺寸
maximumSize             QSize,组件最大尺寸
geometryᅟ              QRect,组件大小,不包括任何窗口框架
        setGeometry()  接受QtCore.QRect或x, y, w, h
width                   组件宽,无setter
heightᅟ                组件高,无setter
x                       组件左上角相对于父组件的 x 坐标,无setter
y                       组件左上角相对于父组件的 y 坐标,无setter
pos                     QPoint,组件左上角在其父组件中的坐标,无setter
size                    QSize,组件的大小,不包括任何窗口框架
        setter:resize(),接受一个QSize或x,y两个参数
setFixedHeight(h)       设置组件固定高
setFixedWidth(w)        设置组件固定宽
setFixedSize()          QSize/w,h   设置组件固定大小
adjustSize()            自动调整组件的大小以适合其内容

显示相关

scroll(dx, dy)          将组件内动向右滚动dx像素,向下滚动dy像素
visible                 是否可见,getter为isVisible()
enabled                 是否启用,getter为isEnabled()
font                    QFont,字体
show()                  显示组件并进入事件循环
isHidden()              组件是否处于隐藏状态
hide()                  将组件设为隐藏状态,等同于setVisible(False)
close()                 关闭此组件,触发QCloseEvent
showNormal()            将组件以正常大小显示
fullScreen              组件是否以全屏模式显示
    isFullScreen()、showFullScreen()
maximized               组件是否最大化
    isMaximized()、showMaximized()
minimized               组件是否最小化
    isMinimized()、showMinimized()
contentsMargins()       QMargins,获取组件内容区域的内边距
contentsRect()          QRect,获取组件内边距内的区域
updatesEnabled          是否启用更新,如果禁用了更新则调用 update()和repaint()不起作用
repaint()               立即重绘整个组件,除非禁用更新或被隐藏
update()                更新组件,不会立即重绘,会安排一个事件,在Qt返回主事件循环时进行处理
                        Qt会进行优化,获得比调用repaint()更快的速度和更少的闪烁
styleSheet       str,组件的样式表
    styleSheet()、setStyleSheet(str)
    style()、setStyle(QStyle)

事件相关

acceptDrops             bool(false),是否启用drop事件
mouseTrackingᅟ         是否为组件启用鼠标跟踪,getter为hasMouseTracking()
clearFocus()            向此组件发送焦点移出事件
grabKeyboard()          拦截所有组件的键盘事件直到调用releaseKeyboard()
grabMouse([QCursor])    拦截所有组件的鼠标事件直到调用releaseMouse()
grabShortcut()          拦截所有组件快捷键直到调用releaseShortcut()

组件的样式

组件通过setStyleSheet(str)或setStyle(QStyle)来修改默认的样式

在Qt中,样式表的格式几乎完全与CSS语法相同

在样式表的继承中,子组件会继承父组件的样式

一般情况下使用setStyleSheet(str)足够,setStyle(QStyle)一般用于设置复杂的样式,在此就不做赘述

字符串格式

选择器

*                   通用选择器
ClassName           匹配该类及其所有子类
.ClassName          匹配该类但不匹配其子类
QPushButton#name    匹配对象名称为name的类
ClassName1 ClassName2    匹配子孙项
ClassName1 > ClassName2  仅匹配直接子项

一个组件的样式字符串中包含选择器则针对该组件及其子组件,如果不包含选择器则仅针对该组件
obj.setStyleSheet("color: red")         // 仅针对该组件本身
obj.setStyleSheet("* {color: red}")     // 针对该组件及所有子组件

状态选择

状态选择类似于CSS中的伪类,可以链式编写指定多个状态的合集,常见的CSS伪类中用于状态的均可使用

在状态选择时可以使用感叹号(!)表示逻辑非,就是非某个状态

:hover      鼠标悬停
:checked    选中
:pressed    鼠标按下
:disabled   禁用
:enabled    启用

*:disabled:hover{color:red}  // 组件禁用并且鼠标悬停时的样式


网址导航