前言:
工作中有很多使用Pyqt5开发UI小工具的小伙伴,或者刚刚接触Pyqt5的小伙伴来说,PyQt5提供了丰富的控件和功能,可以帮助我们轻松地构建功能强大且吸引人的应用程序,而Qtdesigner提供了我们设计和维护UI界面,下面让我们来详细了解下Pyqt5中每个控件的作用吧,希望对各位在使用Pyqt5上有帮助。
1.界面组件
在Qt Designer中,提供了八大类界面可视化组件分别为:
1.1 布局组件 (Layouts):
说明: 布局组件用于管理窗口或者窗口中其他组件的位置和大小。常见的布局包括水平布局(QHBoxLayout)、垂直布局(QVBoxLayout)和网格布局(QGridLayout)。
1.2 分隔组件 (Spacers):
说明: 分隔组件通常是一些不可见的空间,用于在界面上添加额外的空白区域。例如水平分隔符(Horizontal Spacer)和垂直分隔符(Vertical Spacer)。
1.3 按钮组件 (Buttons):
说明: 按钮组件包括各种类型的按钮,如普通按钮(QPushButton)、复选框按钮(QCheckBox)、单选按钮(QRadioButton)、工具按钮(QToolButton)等。
1.4 表项视图 (Item Views):
说明: 表项视图组件提供了显示和编辑列表、表格和树结构数据的功能。例如QListView、QTableView和QTreeView。
1.5 表项组件 (Item Widgets):
说明: 表项组件是专门用于在表项视图中使用的组件,例如用于委托编辑的QComboBox、QCheckBox等。
1.6 容器组件 (Containers):
说明: 容器组件用于囊括和组织其他界面组件。常见的容器组件包括QGroupBox(用于组织控件的分组框)和QTabWidget(提供标签式的多页面容器)。
1.7 输入组件 (Input Widgets):
说明: 输入组件用于接收用户输入的数据。包括文本输入框(QLineEdit)、文本编辑器(QTextEdit)、日期选择器(QDateEdit)、滑动条(QSlider)等。
1.8 显示组件 (Display Widgets):
说明: 显示组件用于向用户展示信息。这些组件包括标签(QLabel)、数字显示(QLCDNumber)、进度条(QProgressBar)等。
2 界面组件
在PyQt5和Qt Designer中,布局组件负责控制窗口内部的空间分配和组件位置,它们确保了界面组件在不同窗口尺寸和分辨率上的一致性和响应性。下面是三个常见布局组件的说明:
2.1 水平布局 (Vertical Layout):
作用: Vertical Layout将其中的组件按照水平方向排列。组件将按照添加的顺序从左到右展示。
特点: 当窗口的宽度变化时,布局内的组件会根据设定的拉伸因子(stretch factor)和组件大小策略(size policy)来调整大小。添加到水平布局中的组件的高度会调整到一致。
2.2 垂直布局 (Horizontal Layout):
作用: QVBoxLayout将其中的组件按照垂直方向排列。组件将按照添加的顺序从上到下展示。
特点: 当窗口的高度变化时,布局内的组件会根据设定的拉伸因子和组件大小策略来调整大小。添加到垂直布局中的组件的宽度会调整到一致。
2.3 网格布局 (QGridLayout):
作用: QGridLayout按照行和列的方式排列其中的组件。你可以指定组件所占的行列,这允许组件在网格中占据多个行/列的空间。
特点: 网格布局提供了更大的灵活性,使组件可以在二维网格中精确放置。当窗口大小变化时,网格中的组件按照设置的拉伸因子和大小策略进行调整,但每个组件可以有不同的宽度和高度。
2.4 Form Layout (QFormLayout):
说明: QFormLayout 是专为表单设计的布局,通常用于标签和字段的组合,标签在左,字段在右。
特点: 这种布局非常适合于创建表单,如登录界面,输入框和标签自动对齐,也支持行的添加、去除和排序。
3 分隔组件 (Spacers):
在PyQt5中,分隔组件(Spacers)用于在布局中添加空白区域,从而对其余控件的位置和尺寸产生影响。分隔组件通常是不可见的,并且不接受任何用户交互。这些组件有助于实现更精细的控制布局中元素的位置和分布。下面是两种常用的分隔组件的作用:
3.1 Horizontal Spacer (水平分隔组件):
作用: 水平分隔组件(QSpacerItem)是一个横向的空间,用于在水平布局(QHBoxLayout)中增加额外空白区域。在两个或多个控件之间插入水平分隔组件,可以将控件推开,从而创建可适应窗口宽度变化的间距。
特点: 水平分隔组件的主要效果体现在调整控件间的水平间距。例如,如果你想让一个按钮靠近窗口的右边缘,你可以在按钮左侧添加一个水平分隔组件来实现这一点。
3.2 Vertical Spacer (垂直分隔组件):
作用: 垂直分隔组件(QSpacerItem)是一个纵向的空间,用于在垂直布局(QVBoxLayout)中增加额外空白区域。在两个或多个控件之间插入垂直分隔组件,可以将控件推开,从而创建可适应窗口高度变化的间距。
特点: 垂直分隔组件的主要效果体现在调整控件间的垂直间距。例如,如果你想让一组控件靠近窗口的底部,你可以在它们上方添加一个垂直分隔组件来推动它们向下移动。
4 按钮组件
4.1 QPushButton:
作用: 这是最常见的按钮,用于执行点击时的动作或命令。QPushButton 可以显示文本、图标或两者都有。当用户点击这个按钮时,它可以触发任何函数或命令。
场景: 提交表单、触发弹窗、开始某个操作等。
4.2 QCheckBox:
作用: 这是一个带有文本标签的方框,用户可以选择勾选或取消勾选它。QCheckBox 可用于表示开/关状态或是进行多选。
场景: 设置选项、功能启用/停用、多项选择等。
4.3 QRadioButton:
作用: 单选按钮,通常在一组 QRadioButton 中仅允许用户选择一个选项。需要与 QButtonGroup 配合使用来创建按钮组,确保一次只能选择一个按钮。
场景: 性别选择、任何需要单选的场景。
4.4 QToolButton:
作用: 这是一个为工具栏设计的按钮,通常用于显示图标而不是文字。QToolButton 可以有不同的行为,如普通按钮点击、菜单弹出等。
场景: 工具栏上的操作按钮,如保存、编辑、刷新等功能。
4.5 QCommandLinkButton:
作用: 特殊的按钮,设计用于执行命令或操作,它提供了比普通按钮更大、带有可选描述文本的外观。
场景: 主要用于启动程序、打开文档或执行操作,常见于现代用户界面中作为引导用户进行下一步操作的提示。
4.6 QToggleButton:
作用: 这个按钮有两种状态:开和关。每次点击都将切换状态。QToggleButton 可用于表示开/关状态。
场景: 开关某项功能、模式切换等。
4.7 总结:
每种按钮组件都是为了适应不同的界面交互设计需求。通过信号和槽机制,开发者可以轻松地将按钮的用户交互转化为应用程序的逻辑反应。在 Qt Designer 中,这些按钮可以通过拖放直接添加到窗口设计中,然后通过属性编辑器定制它们的行为和外观。
5 表项视图 (Item Views):
5.1 QListView
作用: 以列表形式展示项。
场景: 展示简单的项目列表,如文件名或者待办事项列表。
5.2 QTableView
作用: 以表格形式展示复杂数据。
场景: 展示数据库查询结果、设置或配置的多属性对象。
5.3 QTreeView
作用: 以树形结构展示层次化数据。
场景: 文件系统浏览器、设置菜单、组织结构展示。
5.4 QColumnView
作用: 以多列浏览方式展示层级数据。
场景: 导航复杂的数据结构、邮件客户端的文件夹浏览。
6 表项组件 (Item Widgets)
6.1 QListWidget
作用: 用于快速创建项目列表,简化项添加和操作过程。
场景: 不需要自定义模型的简单列表显示,如设置界面中的选择列表。
6.2 QTableWidget
作用: 用于快速创建和管理表格数据,简化单元格数据设置。
场景: 表格布局数据展示,无需自定义模型但需要展示行列数据。
6.3 QTreeWidget
作用: 用于快速创建层次结构的数据视图。
场景: 需要展示嵌套数据但无需自定义模型的场景,如设置菜单、项目结构。
7 容器组件 (Containers)
7.1 QGroupBox
作用: 对一组控件进行逻辑分组。
场景: 界面中相关设置或选项的分组显示,增强UI的组织性。
7.2 QTabWidget
作用: 将内容分隔至不同的标签页。
场景: 分类展示设置、信息或功能,以节省空间和组织内容。
7.3 QScrollArea
作用: 提供滚动条,使内容能在有限空间内滚动显示。
场景: 展示超出当前界面尺寸的内容,如长文本、大图。
7.4 QFrame
作用: 提供简单的容器或分割线。
场景: 界面设计中的视觉分隔或装饰,如分隔菜单项、组织布局块。
输入组件 (Input Widgets)
7.5 QLineEdit
作用: 单行文本输入。
场景: 获取用户名、搜索框、或任何简短文本输入。
7.6 QTextEdit
作用: 多行文本编辑。
场景: 编辑邮件、撰写文档、或输入大量文本。
7.7 QSpinBox & QDoubleSpinBox
作用: 数字输入,允许通过箭头增减。
场景: 设置数量、调整设置参数。
7.8 QComboBox
作用: 下拉选择框,列出可能的选择。
场景: 选择配置选项、过滤条件等。
显示组件 (Display Widgets)
7.9 QLabel
作用: 显示文本或图像。
场景: 展示说明文字、图标或简单的用户提示。
7.10 QLCDNumber
作用: 显示数字的LCD风格组件。
场景: 显示时间、计分板或其他数字信息。
7.11 QProgressBar
作用: 展示操作的进度。
场景: 文件上传、数据处理的进度显示。
8 输入组件 (Input Widgets)
8.1 QLineEdit
作用: 提供一个简单的单行文本输入框。
场景: 适用于输入短文本,如用户名、搜索关键词、路径输入等。
8.2 QTextEdit
作用: 提供富文本编辑,允许输入和显示多行文本。
场景: 编写或编辑邮件、文章、代码或任何长文本。
8.3 QSpinBox & QDoubleSpinBox
作用: 让用户能选择一个特定范围内的整数(QSpinBox)或浮点数(QDoubleSpinBox)。
场景: 输入或选择一个数量值,例如设置应用的配置选项、数量选择器。
8.4 QComboBox
作用: 提供了可编辑的下拉列表框,用户可以选择列表中的项,或输入新项。
场景: 在已有选项中选择或直接输入,常用于表单填写、设置选项。
8.5 QSlider
作用: 水平或垂直的滑动条,让用户可以通过拖动选择特定的值。
场景: 调整音量、亮度或任何范围值。
8.6 QDial
作用: 圆形的滚动条,提供了一个旋转的界面来选择值。
场景: 类似于QSlider的替代选项,适用于提供更直观的控制,如调整声音等级。
8.7 QDateEdit, QTimeEdit, QDateTimeEdit
作用: 用于输入或选择日期(QDateEdit)、时间(QTimeEdit)或日期和时间(QDateTimeEdit)。
场景: 任何需要设置日期、时间的场合,如日程管理器、预订系统。
8.8 QKeySequenceEdit
作用: 用于捕获和编辑键盘快捷键序列。
场景: 配置应用程序或游戏中的键盘快捷键。
9 显示组件 (Display Widgets)
9.1 QLabel
作用: 显示不可编辑的文本或图像。
场景: 用于展示标签、提示信息、说明文本或图片。
9.2 QLCDNumber
作用: 以LCD风格显示数字。
场景: 显示计时器、计分器或其他数值信息。
9.3 QProgressBar
作用: 显示操作的完成进度。
场景: 文件下载、数据处理、或任何需要表明完成状态的长时操作。
9.4 QDial
作用: 圆形的拨号器控件,用于旋转选择值。
场景: 更直观的替代滑条,适合模拟实体拨号器的交互,如音量调节。
9.5 QGraphicsView
作用: 在场景(QGraphicsScene)中展示和管理2D图形项。
场景: 绘图、游戏背景、图片查看器等需要图形场景的应用。
9.6 总结
输入组件和显示组件都是构建用户界面的必要部分,允许用户输入和修改数据,以及以合适的方式展示程序的状态或结果给用户。这些控件的信号和槽机制使得开发者可以轻松集成用户的交互到应用程序逻辑中。在Qt Designer中,这些控件通过拖放到工作区域即可添加到你的窗口设计中,并可通过属性编辑器进行定制。
10 组件属性
在Qt Designer中的每种组件属性编辑部分可以进行设置,如下图所示:
每种组件的属性会有所不同之处,这里以QWidget窗口为例,如下所示:
可以看到,最顶层的节点为组件对应的父类(Form),从上往下排列的节点,基本按照父类在上,子类在下的方式排列,很好的体现了类的继承关系以及相关属性是哪个类提供的。
10.1 enabled属性
enabled属性用于表示组件是否可用,一个组件的部件可以接收和处理鼠标和键盘事件,当组件不可用时则无法接收和处理鼠标和键盘事件。
enabled属性缺省值为True,有些组件在被禁用时会以不同的方式显示自己。例如,按钮可能会将其标签显示灰色。
10.2 控制组件
控制组件大小的属性有:geometry 、sizePolicy、minimumSize、maximumSize、sizeIncrement和baseSize,用于控制组件的初始大小以及动态调整大小的控制。属性配置界面的geometry定义了组件的初始大小,其他属性都与组件大小调整时控制组件的大小相关。
geometry属性
geometry属性保存组件相对于其父级对象的位置和大小,Qt实际上是以一个长方形来表示组件的位置和大小的,包括左上角的坐标位置、长和宽。
sizePolicy属性
sizePolicy属性用于说明组件在布局管理中的缩放方式,当部件没有在布局管理器中时,该设置无效。
sizePolicy属性由四个值组成,分别是水平策略、垂直策略、水平伸展和垂直伸展。
minimumSize属性
mimimumSize属性表示组件能被缩小到的最小尺寸,单位为像素,缩小到该尺寸后不能再进一步缩小了。如果组件在布局管理器中,且布局管理器也设置了最小尺寸,则部件本身的最小尺寸以部件的mimimumSize为准,布局管理器设置的不起作用。
maximumSize属性
maximumSize属性表示组件能被放大到的最大尺寸,放大到该尺寸后不能再进一步放大了。组件的缺省最大值为:(16777215,16777215)。
sizeIncrement属性
sizeIncrement属性表示组件调整大小时的每次变化的增量大小(单位:像素)的基数,实际调整大小计算公式如下:
width = baseSize().width() + i * sizeIncrement().width()
height = baseSize().height() + j * sizeIncrement().height()
其中i,j为非负整数。
baseSize属性
baseSize属性是组件的基础大小(单位:像素),如果组件设定了sizeIncrement,该属性用于在调整组件尺寸时计算组件应该调整到的合适值,这个属性缺省值是(0,0)。
palette属性
palette属性是调色板作用,管理着控件和窗体的所有颜色,可用于管理控件的外观显示以及设置组成。
10.3 font属性
font属性中可以设置组件的字体属性,包括字体的字体簇(Family)、大小(Size)、是否粗体(Bold)、是否斜体(Italic)、是否带下划线(Underline)、是否带删除线(Strikeout)等。
10.4 cursor属性
cursor属性保存组件的鼠标光标形状,当鼠标位于该组件上时就会呈现该属性设置的光标形状,可取值的范围及含义如下图所示:
10.5 mouseTracking属性
mouseTracking属性用于保存是否启用鼠标跟踪,缺省情况是不启用的。不启用的情况下,对应部件只接收在鼠标移动同时至少一个鼠标按键按下时的鼠标移动事件,启用鼠标跟踪的情况下,任何鼠标移动事件部件都会接收。
10.6 tabletTracking属性
tabletTracking属性保存是否启用组件的平板跟踪,缺省是不起用的。不启用平板跟踪的情况下,部件仅接收触控笔与平板接触或至少有个触控笔按键按下时的触控笔移动事件。
如果组件启用了平板跟踪功能,部件能接收触控笔靠近但未真正接触平板时的触控笔移动事件,这可以用于监视操作位置以及部件的辅助操作功能(如旋转和倾斜),并为图形界面提供这些操作的信息接口。
10.7 focusPolicy属性
focusPolicy属性可以设置组件的焦点策略。设置参数说明如下所示:
NoFocus:组件不支持焦点;
TabFocus:Tab键获取焦点;
ClickFocus:鼠标按下获取焦点;
StrongFocus:Tab键和鼠标按下获取焦点;
WheelFocus:鼠标轮滚动获取焦点。
总结:
每个控件都有特定的应用场景,例如QPushButton用于典型的点击动作触发,而QLabel则多用于显示信息。选择不同的控件取决于你的应用程序的需求。通过PyQt5提供的广泛的控件库,你可以创建丰富而具有吸引力的桌面应用程序,只有了解这些属性的设置,以及各种组件的组合的灵活运用才能设计出好的UI界面。