前言:
今天小伙伴们对“python图形化编程的基本步骤通常包括”都比较珍视,咱们都需要知道一些“python图形化编程的基本步骤通常包括”的相关知识。那么小编同时在网上搜集了一些对于“python图形化编程的基本步骤通常包括””的相关资讯,希望姐妹们能喜欢,大家一起来了解一下吧!【前言】PySide6是用来做图形界面开发的强有力模块,能够轻松设计出复杂的图形界面,样式美观,灵活多变。尤其是该模块里面的Qt设计师工具软件,让我们在可视化环境里通过拖拽组件设计程序窗体,而且在Qt设计师里还可以连接信号和槽,实现了一些预设功能的直接封装,免去一部分代码的书写过程,效率非常高。
在上一篇笔记里,已经对Qt设计师Designer做了全面介绍,但是对组件及其属性和方法介绍的不全,并且基本没有涉及代码部分,所以在这篇笔记里将结合实例对这些内容进行重点介绍。
一、图形界面加载方法
1、动态加载和静态加载
在Qt设计师中设计的图形界面,保存在扩展名为ui的文件中,实际使用时需要在程序里加载,有两种方式:动态加载和静态加载。动态加载是直接读入图形界面ui文件,静态加载是先将ui文件转换成py文件,然后在程序中以模块的形式进行导入。相比较而言,静态加载比动态加载多了一个转换的步骤,但是动态加载有一个最大的问题,那就是在程序中编写代码时,涉及到图形界面里面的组件的代码部分没有提示。因为动态加载方式读入的是ui文件,python不能识别出ui文件里面的组件,而静态加载导入的是图形界面ui文件转换后的py文件,因此不存在代码没有提示的问题。如果将转换工具配置在集成开发环境里,转换ui文件非常方便,所以我现在只用静态加载方式。
2、静态加载模板
初学时,在python主程序和图形界面之间总是存在着一个断层,就是很难把图形界面跟主程序代码连接起来形成一个完整程序。首先是因为导入的库太多,然后涉及到的文件又多,包括ui文件、ui转换的py文件、qrc资源文件以及qrc转换的py资源文件,一时之间很难理清这些文件的关系。其实真正掌握之后,加载图形界面的代码条理还是很清晰的,下面就来理顺一下从设计窗体到静态加载的流程。下面涉及的一些细节操作可以到我上一篇笔记中查看。
(1)操作流程
在Qt Designer中设计图形界面,包括配置资源文件、建立动作、编辑信号和槽以及保存ui文件将ui文件转换成py文件将qrc文件转换成py文件在python程序中书写相应代码
【注】静态加载图形界面用到的是ui和qrc文件转换出来的py文件,并不依赖于ui和qrc文件本身。qrc转换成的py文件里面都是图像、图标和声音等资源文件的二进制数据,主程序的运行也不再依赖于图像、图标和声音的源文件。py格式的资源文件我们不用管,它的调用是在图形界面py文件里,程序已经为我们自动生成,如果主程序中还需用到资源文件,那么在主程序中也需要导入。
(2)代码加载流程
从PySide6的相应模块中导入相应的类从图形界面py文件中导入主窗口类,Ui_MainWindow或Ui_Form以模块方式导入资源文件实例化主窗口类,就是创建窗口对象初始化窗口创建QApplication类对象显示窗口执行QApplication类对象的exec()方法,就是保持窗口循环,直到关闭窗口
(3)静态加载代码模板
为了代码结构合理,我们通常为主窗口自定义一个类,继承PySide6的QMainWindow类,把加载图形界面的代码都写在自定义类里,主程序体里只有创建QApplication类对象、显示窗口和窗口循环等几条语句,这样整体代码条理非常清晰。模板代码如下:
# 从PySide6的相应模块中导入必须用到的类from PySide6.QtWidgets import QApplication, QMainWindow# 从图形界面py文件中导入主窗口类Ui_Form# 如果在Qt设计师里创建的窗口是Main Window,这里导入的就是Ui_MainWindowfrom main import Ui_Form # 定义主窗口类,继承QMainWindowclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() # 调用父类的初始化方法,pycharm里一键输入 self.ui = Ui_Form() # 创建窗口对象 self.ui.setupUi(self) # 调用窗口对象的初始化方法对窗口初始化app = QApplication([]) # 创建app对象,注意参数[]空列表必须有,暂时不需要有内容window = MainWindow() # 创建自定义主窗口类的窗口对象window.show() # 调用窗口对象的show方法显示窗口app.exec() # 调用app对象的exec方法循环显示窗口二、窗口布局
1、布局技巧
规划阶段。事先规划总体布局,规划时遵循由外及里的原则,即先把窗口划分成几个大区域,然后再按照这个原则划分大区域里包含的分区,依此类推,创建一个布局草图操作阶段。在实际操作阶段,遵循由里而外的操作原则,按照布局规划图从左往右或者从上往下依次创建每个大区内部的分区布局。拿一个规划的大区为例,先把大区内最小分区里的组件放置到窗口,并简单排列,然后把这几个组件全选,在任意组件上右键→布局→选择合适布局方式(横向或者纵向布局),这个分区的布局就做好了。按照这种方式,把这个大区内的其它分区的布局全都做好,最后把这个大区内的所有分区布局选中,选择合适的布局方式,这个大区的总体布局就做好了。按照这种方式,把所有规划大区的布局都做好,最后在对象查看器的最顶层对象(即主窗口)上右键→布局→选择最终的布局结构。窗口的最终布局完成后,在对象查看器里窗口对象上就会显示布局图标(未完成时是红色的禁止图标),这种状态下,所有窗口组件都可以随窗口的变化而自适应的变化。
布局演示如下:
视频加载中...
2、布局微调
上面的布局完成之后,还存在着一些问题,需要进行微调。例如,中间部位两个显示区域在横向上是对等的,而我们需要左边区域小一些右边区域大一些。但是,总体布局只要形成,就不能用鼠标拖动的方式来更改布局的大小。像这种需要在横向上调整大小的布局,必须在两个独立的布局外边再套上一个横向布局,然后通过调整两个独立区域的占比就可以调整大小了,纵向亦然。那么问题又来了,现在总体布局已经形成,怎么样单独更改呢?解决办法就是,先把这两个区域外边的布局打散,再重新设计这部分布局。另外,每个布局都可以调整其上下左右的间隔,有些地方可以用隔板(弹簧)组件进行分隔,以达到调整组件间距的目的。布局微调演示如下:
视频加载中...
3、使用qss样式调节组件
每种布局里面的组件都在布局方向上受到影响,例如横向布局里面的组件的宽度就会受到布局的控制,想要修改就可以采取上面布局微调里介绍的办法,但是在另一个方向上的尺寸还是无法调节,这时就可以采用qss样式表来完成。
qss样式表跟HTML里面的css是一样的,书写格式代码就能够对组件的字体、文字颜色、边框颜色、背景颜色、宽高等进行调节,非常方便。qss样式可以在每个组件自己的样式表里定义,也可以统一在窗口对象的样式表里定义,推荐采用统一在窗口里定义,否则如果组件很多,那么在书写和修改样式表时需要挨个组件去找,效率太低。并且,统一在窗口里定义qss样式表还有一个好处,可以针对某一类组件进行统一调整,例如针对按钮类定义了qss样式,那么所有按钮都可以随着变化。
qss样式的基本格式如下:
color: rgb(255, 0, 0);font-size:15px;background-color: rgb(85, 255, 127);border-color: rgb(255, 255, 0);width:50px;height:20px;针对所有元素的格式如下:
*{color: rgb(255, 0, 0);font-size:15px;}针对某一类组件的格式如下:
QPushButton{color: rgb(255, 0, 0);font-size:15px;background-color: rgb(85, 255, 127);border-color: rgb(255, 255, 0);width:50px;height:20px;}针对某一个组件的格式如下:
#pushButton{height:30px;}针对组件的某种状态的格式如下(如按钮的鼠标悬浮状态):
QPushButton:hover {color: red;border:none;}为组件添加自定义属性,针对自定义属性相同的组件的qss样式:
*[myClass=top] {height:30px;}
qss样式演示如下:
视频加载中...
三、按钮组件部分
(一)PushButton
PushButton就是普通按钮,它的属性由四部分构成:QObject、QWidget、QAbstractButton、QPushButton,功能和作用如下:
QObject是对象属性,在这里可以更改对象名称,就是在程序中用来调用组件的名称,这是通用属性,每个组件都具备。QWidget是组件属性,也是所有组件的通用属性,最常用的是geometry和sizePolicy。geometry是几何形状,用来更改组件位置和宽高,如果不使用布局这个属性有效,使用布局之后这个属性失效,即无法更改。sizePolicy是尺寸策略,窗口使用布局之后,这个属性用来调节组件在横向和纵向上的伸展策略。QAbstractButton是抽象属性,是按钮类组件的父类,在这部分里可以更改按钮标题、图标、图标大小、快捷键、是否允许选中和自动重复等属性。QPushButton是PushButton按钮的独有属性,包括auto Default、default和flat三个属性。
1、重要属性
(1)shortcut
shortcut是快捷键属性,它的最强大之处在于允许将任意键定义为快捷键,支持几个普通按键组合,例如随意定义一个jkl快捷键,在窗口运行界面,正常速度连续按jkl就能够触发按钮的事件。注意,在定义普通按键组合快捷键时,先在shortcut属性右侧框里点一下,然后快速按下需要定义的几个按键,如果按的慢,系统检测就结束了,后面再按的键就变成了另外一组快捷键。
(2)checkable、checked和autoExclusive
checkable是否可选择属性,位置在快捷键属性下面,见上图。如果checkable属性为真,则按钮被点击后不会弹起(样式会跟正常时不同),就像电源插排上的开关按钮,按下后就会卡住,然后再按一下弹起。利用isChecked()方法可以检测按钮是否为选中状态,这样就可以实现一些特殊功能。
checked属性用来设置按钮是否选中,需要与checkable配合使用。如果将这两个属性都设置为真,那么程序运行后按钮就处于按压状态,点击一下才恢复到正常按钮状态。在程序中可以使用setChecked(bool)方法来设置checked属性。
autoExclusive是自动排他属性,如果同一父组件内的一组按钮都设置了checkable属性为真,那么当一个按钮按下变成按压状态后,其它按钮都会弹起,就像过去的录音机按键一样。并且,如果一个按钮设置了自动排他属性,那么点击自己将无法弹起。
(3)auto Repeat、auto RepeatDelay和auto RepeatInterval
auto Repeat自动重复属性,如果鼠标按住按钮不抬起,那么按钮会重复发射信号。在重复发射信号的过程中,有延迟和间隔时间,就是auto RepeatDelay和auto RepeatInterval属性,单位为毫秒。
(4)default和auto Default
default和auto Default属性都是将按钮设置为默认按钮,如果焦点在该按钮上(鼠标点击一次或者在代码里设定焦点),那么一直按回车键就可以一直发射信号。目前没发现二者在功能上有什么差别,只是default设置为真后,按钮会出现边框。
(5)flat
flat属性为真则将按钮设为平面按钮,就是没有边框也没有突出显示的按钮,没有其它功能。
2、常用方法
常用方法就是PySide6里所谓的信号,介绍如下:
clicked():鼠标单击信号,鼠标左键点击时触发,最常用信号pressed():鼠标按压信号,没发现跟clicked有什么不同released():鼠标释放信号,鼠标左键点击后抬起时触发。利用这个信号处理事件,能够起到一定的缓冲作用,如果鼠标按下不抬起,再将指针移到按钮外,那么就不会触发信号,有时可以避免一些误操作。
3、实例演示
下面用一个实例演示一下以上介绍的内容。程序运行后,直接按回车键是没有反应的,这时我们单击第一个加长按钮,文本编辑框里的文本会放大,现在一直按回车键文字就可以一直放大了。这是因为我们在Qt设计大师里将第一个加长的按钮的auto Default属性设置为真,然后将它的单击信号关联到文本编辑框的ZOOM in(放大显示)槽上,不需要写代码。程序运行后,默认焦点不在这个按钮上,因此按回车键没有反应,用鼠标点击一下后它就获得了焦点,由于它是自动默认按钮,所以点击完毕后系统默认把焦点又交还给它,因此一直按回车键都有效。另外,在Qt设计大师里为这个按钮设置了”JKL”组合快捷键,在程序运行后,按顺序正常按“JKL”就可以触发按钮信号,看到文字放大显示,但是快捷键并不能把焦点移动到这个按钮上。
用鼠标点击“按住连续缩放”按钮没有反应,单击“放大显示”按钮,然后再点击“按住连续缩放”按钮不放开,这时文字就一直放大;单击“缩小显示”按钮,再点击“按住连续缩放”按钮不放开,这时文字就一直缩小。这是因为“按住连续缩放”按钮的auto Repeat属性设为真,按住后会连续发射信号;而“放大显示”和“缩小显示”这两个按钮的checkable和autoExclusive属性为真,由于是排他性的,所以点击这两个按钮时,它们的checked属性是一起改变的,在代码进行判断处理就可以了。
视频加载中...
4、演示代码
from PySide6.QtWidgets import QApplication, QMainWindowfrom ui_test1 import Ui_Formclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # “按住连续缩放”按钮单击信号 self.ui.pushButton.clicked.connect(self.auto_expanding) # 文字缩放自定义方法 def auto_expanding(self): if self.ui.pushButton_4.isChecked(): self.ui.plainTextEdit.zoomIn() elif self.ui.pushButton_2.isChecked(): self.ui.plainTextEdit.zoomOut()if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
(二)Tool Button
Tool Button是工具按钮,非常灵活的按钮组件,可以单独或者混合显示图标和文本,还可以显示箭头(三角形符号)。既可以当作普通按钮使用,又可以弹出菜单,弹出菜单又有立即弹出、长按弹出和点击菜单区弹出三种方式。善加利用,是非常实用的工具按钮。
最典型的应用场景是Word、Excel等办公软件的工具栏按钮,例如颜色按钮,直接点击按钮是设置为当前颜色,点击右侧三角符号则打开颜色选择器。还有浏览器的返回按钮,即浏览器地址栏左侧的 ← 这个按钮,既可以单击返回上一页,又可以长按显示浏览的历史记录。
1、重要属性
QAbstractButton类属性不用再赘述,重点介绍QToolButton里面的几个属性。
(1)popupMode
菜单弹出方式,一共有三种方式:
DelayedPopup:延迟弹出,即需要用鼠标左键长按才能弹出菜单。选择这种方式后,单击工具按钮则正常执行按钮响应事件,长按鼠标则弹出功能菜单。MenuButtonPopup:菜单按钮弹出,即像菜单按钮一样弹出。选择这种方式后,工具按钮的右侧会划分出一个窄条区域,显示一个向下的黑色三角形符号,这个区域就是菜单响应区,点击按钮前面部分可以正常执行按钮事件,点击菜单响应区则弹出菜单。InstantPopup:直接弹出。选择这种方式后,工具按钮不能再完成单击响应事件,而是直接弹出功能菜单。
(2)toolButtonStyle
工具按钮样式,共有五种类型:
ToolButtonIconOnly:仅显示图标ToolButtonTextOnly:仅显示文字ToolButtonTextBesideIcon:文字在图标旁边ToolButtonTextUnderIcon:文字在图标下面ToolButtonFollowStyle:跟随qss样式
(3)autoRaise
自动升起属性,也就是设为真之后变成平面按钮,否则按钮带有边界,且有凹陷效果,所以把该属性称为自动升起。
(4)arrowType
箭头类型,按钮自动显示黑色三角符号,会覆盖图标和文字,共有五种方式:
NoArrow:没有箭头,按钮和文本会显露UpArrow:箭头向上DownArrow:箭头向下LeftArrow:箭头向左RightArrow:箭头向右
2、常用方法
clicked():单击工具按钮发射的信号triggered():单击菜单项发射的信号setMenu():设置菜单。工具按钮并没有添加弹出菜单的地方,需要在主菜单栏里创建菜单项目,然后在程序代码里使用setMenu()方法来指定菜单,在代码里也可以把主菜单栏中的供工具按钮使用的菜单项目隐藏。
3、实例演示
视频加载中...
4、演示代码
from PySide6.QtWidgets import QApplication, QMainWindowfrom ui_test2 import Ui_MainWindowclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_MainWindow() self.ui.setupUi(self) # 根据需要,可以将整个菜单栏隐藏 # self.ui.menubar.setVisible(False) # 将工具按钮使用的菜单项隐藏 self.ui.menuFile.menuAction().setVisible(False) self.ui.menuEdit.menuAction().setVisible(False) self.ui.menuRenew.menuAction().setVisible(False) self.ui.menuView.menuAction().setVisible(False) # 为工具按钮设置菜单 self.ui.toolButton.setMenu(self.ui.menuFile) self.ui.toolButton_2.setMenu(self.ui.menuEdit) self.ui.toolButton_3.setMenu(self.ui.menuRenew) self.ui.toolButton_4.setMenu(self.ui.menuView)if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
(三)Radio Button
Radio Button是单选按钮,具有排他性,成组使用。特别要注意一点,一组单选按钮必须要放置在一个容器类组件中,也就是说一组单选按钮必须具有同一个父类(不能是主窗口),否则单选按钮的排他性就会出现问题,放置在不同容器内的单选按钮互不影响。
1、重要属性
Radio Button没有自己独特的属性,都是继承属性。在Qt设计大师里,除了把一个单选按钮设置成默认选择状态,几乎不需要设置任何属性。组件尺寸和位置基本都用鼠标拖拉的方式设定,可以在属性里进行微调。
checkable:是否允许选择checked:是否被选择
2、常用方法
clicked():单选按钮单击信号
3、创建按钮组
如果图形界面里有很多单选按钮,那么在代码里就会定义对应数量的槽函数,势必会增加代码量以及不方便阅读。为了避免这种情况,可以为同组的单选按钮创建一个按钮组,在程序代码里只需要将按钮组的clicked信号连接到一个自定义槽函数就可以了。在自定义槽函数里,通过检测id号来确定哪个单选按钮被单击了。
(1)在Qt设计大师里创建按钮组
在Qt设计大师里将同组单选按钮全部选中,然后依次点按鼠标右键→Assign to button group→New button group,这样就为这一组单选按钮创建了按钮组,每个单选按钮都有一个系统自动分配的id号,可以在代码里使用按钮组的checkedId()方法获取。
(2)在程序代码里创建按钮组
这种方式相对比较费事,需要事先导入QButtonGroup类,然后创建按钮组实例对象,把同组的单选按钮利用addButton()方法加入到一个按钮组里,并定义每个单选按钮的id号。如果一组的单选按钮很多,可以将同组的单选按钮以序列形式命名,如radioButton_1、radioButton_2等等,然后用循环的方法向按钮组里添加单选按钮。
下面的实例就是采用在代码里创建按钮组方式,刚开始在网上查阅相关资料时,都说要创建按钮组,就是没人介绍如何在Qt设计大师里创建。我就以为按钮组是一个组件,翻遍了组件区还是没找到,无奈就只能写代码创建了。后来在Qt设计大师里无意中按了一下右键,才发现了这个无比浅显又折磨人的奥秘!其实,在PySide6里面,像这种不大不小的坑实在是无计其数,或许还是自己学习和掌握的不到位吧!
4、实例演示
本例实现利用单选按钮控制一个Label组件里图片的对齐方式,虽然单选框在设计时很简单,但是实际在代码里操作时需要用到很多技巧。实例里动态设置Label组件的图片对齐方式也是一个技巧,感觉挺繁琐,还需要使用QtCore模块的Qt类进行设置。
视频加载中...
5、演示代码
from PySide6 import QtGuifrom PySide6.QtWidgets import QApplication, QMainWindow, QButtonGroupfrom PySide6.QtCore import Qtfrom ui_radio import Ui_Formclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 如果一组的Radio Button过多,可以创建一个按钮组对象来统一管理,这样只需要定义一个槽函数 self.btn_group = QButtonGroup(self) # 创建按钮组对象 # 利用循环将单选按钮radioButton_1到radioButton_9加入到按钮组 for i in range(1, 10): widget = f'self.btn_group.addButton(self.ui.radioButton_{i},i)' eval(widget) # 把按钮组的按钮单击信号关联到自定义槽函数 self.btn_group.buttonClicked.connect(self.rbtnClicked) # 未使用按钮组管理的单选按钮的单击信号处理方式,每个按钮都需要定义一个槽函数 self.ui.radioDisplay.clicked.connect(self.displayImage) self.ui.radioNodisplay.clicked.connect(self.nodisplayImage) # 单选按钮组单击槽函数 def rbtnClicked(self): self.flag = self.btn_group.checkedId() # 自动计算显示位置坐标 if self.flag <= 3: h = self.flag - 1 v = 0 elif 4 <= self.flag <= 6: h = self.flag - 4 v = 1 else: h = self.flag - 7 v = 2 # 根据上面确定的位置坐标,确定横向和纵向对齐方式 h_align = ['Qt.AlignLeft', 'Qt.AlignHCenter', 'Qt.AlignRight'] v_align = ['Qt.AlignTop', 'Qt.AlignVCenter', 'Qt.AlignBottom'] align = f'{h_align[h]} | {v_align[v]}' self.ui.label.setAlignment(eval(align)) # 显示图片单选按钮被单击槽函数 def displayImage(self): self.ui.label.setPixmap(QtGui.QPixmap(r'resfile\open.png')) # 不显示图片单选按钮被单击槽函数 def nodisplayImage(self): self.ui.label.setPixmap(QtGui.QPixmap())if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
(四)CheckBox
CheckBox是复选框组件,可以独立使用,也可以像单选按钮那样加到一个按钮组里。如果加入了按钮组,使用QButtonGroup的exclusive属性来控制单选还是多选,exclusive属性为真,则复选框就变成了单选按钮功能。
1、重要属性
CheckBox都是继承属性,唯一独有属性是tristate。
checkable:是否允许选中,为假时该复选框将不可选tristate:三态属性,该属性为真时,则复选框有选中、未选中和半选中三种状态,不常使用
2、常用方法
stateChanged:状态改变触发信号
3、实例演示
视频加载中...
4、演示代码
from PySide6.QtGui import QFontfrom PySide6.QtWidgets import QApplication, QMainWindowfrom ui_checkBox import Ui_Formclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) # 创建一个自定义字体实例对象 self.myfont = QFont() # 为字体对象设置默认字号和字体 self.myfont.setPointSize(72) self.myfont.setFamily('微软雅黑') # 用自定义字体对象设置文本编辑框的字体 self.ui.plainTextEdit.setFont(self.myfont) # 复选框的状态改变信号和槽 self.ui.checkBox.stateChanged.connect(self.chk_Bold) self.ui.checkBox_2.stateChanged.connect(self.chk_italic) self.ui.checkBox_3.stateChanged.connect(self.chk_underline) # 字体加粗 def chk_Bold(self): self.myfont.setBold(self.ui.checkBox.isChecked()) self.ui.plainTextEdit.setFont(self.myfont) # 字体倾斜 def chk_italic(self): self.myfont.setItalic(self.ui.checkBox_2.isChecked()) self.ui.plainTextEdit.setFont(self.myfont) # 字体加下划线 def chk_underline(self): self.myfont.setUnderline(self.ui.checkBox_3.isChecked()) self.ui.plainTextEdit.setFont(self.myfont)if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
(五)Command Link Button
命令链接按钮,外观与平面按钮相同,按钮标题允许设置描述信息,描述信息以小字形式显示在标题下方。功能与普通按钮没有区别,允许设置一组互斥按钮。典型应用场景是Windows11操作系统的设置界面,如图:
PySide6的命令链接按钮样式如下:
(六)Dialog Button Box
对话框按钮盒子,用于生成成套按钮,感觉没有什么实际意义。只有一个重要属性standardButtons,里面包含所有对话框按钮,通过点选自由搭配按钮。
四、容器组件部分
容器组件用来承载其它组件,形成分组效果,也可以做成分页面,对于窗口布局非常有用。在上一篇笔记里已经详细介绍了Scroll Area、Tab Widget、Stacked widget这三个组件,在这里介绍一下其它容器组件。
(一)Tool Box
Tool Box是工具箱组件。顾名思义,可以放置常用工具,能够分层叠放,不占空间,使用灵活。
1、操作技巧
(1)增加页面
在窗体的Tool Box组件上或者对象查看器的Tool Box对象上按右键,选择弹出菜单中的Insert Page选项,就可以看到在当前页之前和当前页之后两个选项,点击就在相应位置插入一个新页面。
(2)删除页面
把要删除的页面展开,即变为当前页,然后在窗体的Tool Box组件上或者对象查看器的Tool Box对象上按右键,在弹出菜单上有Page 1 of 3(具体数字视实际情况)的菜单项,再选择Delete Page即可删除。这个菜单项就在插入页面上面,就不再另行配图了。
2、重要属性
工具箱的每个页面标题必须在属性里才能更改,属性设置页面见上图。几个重要属性如下:
frameShape:框架样式currentltemText:当前页标题文本currentltemName:当前页名称currentltemIcon:当前页图标
3、实例演示
视频加载中...
4、演示代码
import osfrom PySide6.QtWidgets import QApplication, QMainWindowfrom ui_toolbox import Ui_Formclass MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.ui = Ui_Form() self.ui.setupUi(self) self.ui.pushButton_8.clicked.connect(self.notepad) self.ui.pushButton_9.clicked.connect(self.calc) def notepad(self): os.system('notepad') def calc(self): os.system('calc')if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec()
(二)Dock Widget
Dock Widget是停靠组件,本身又是容器组件,可以在窗口上下左右四个边进行拖拽停靠。双击标题栏或者点击浮动窗口按钮,就可以从工具栏形式变成浮动窗口,点击Dock Widge的关闭按钮可以隐藏该组件,还可以利用它的show()和hide()方法进行显示和隐藏。
【注意】使用Dock Widget组件,创建的窗体必须是MainWindow,这样Dock组件才能够实现停靠和浮动功能。
1、重要属性
Dock Widget的重要属性都在Features(特征)里,内容如下:
floating:正在浮动属性,设置为真则组件变成浮动状态(浮动窗口),默认是假DockWidgetClosable:停靠组件是否允许关闭,默认是真,如果设为假则组件上不显示关闭按钮,不能关闭DockWidgetMovable:停靠组件是否允许移动,默认是真,如果设为假则组件不能拖动DockWidgetFloatable:停靠组件是否允许浮动,默认是真,如果设为假则组件上不显示浮动按钮,不能浮动DockWidgetVerticalTitleBar:纵向标题栏,默认是假DockWidgetFeatureMask:特征掩饰,跟纵向标题栏属性是联动的,也是设置纵向标题栏NoDockWidgetFeatures:没有停靠组件特征,组件上不显示浮动和关闭按钮,组件不能拖动和关闭,不能移动
2、常用方法
show():显示组件hide():隐藏组件setFlating():设置浮动属性setFeatures():设置特征,即设置上面介绍的那些属性
3、实例演示
本例是在Qt设计师里制作了一个简易的记事本界面,用Dock Widget组件做了一个工具栏,菜单里有两项:显示和隐藏Dock Widget组件。界面设计好之后,直接在Qt设计师里将功能按钮的clicked()信号与文本编辑框的相应预设槽函数进行了关联,不需要到主程序里写代码,直接在Qt设计师里就可以实现全部功能。演示如下:
视频加载中...
未完,待续……
标签: #python图形化编程的基本步骤通常包括