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} // 组件禁用并且鼠标悬停时的样式