首页 > 其他分享 >pyqt的简介与使用说明

pyqt的简介与使用说明

时间:2024-02-04 18:32:04浏览次数:35  
标签:控件 窗口 对象 简介 布局 pyqt 说明 ui 管理器

一,概念

1,QT是一个强大的工具库,提供可视化窗口,它是基于C++开发的。pyqt和pyside这两个python库使得可以用python来调用QT库。Pyqt出现更早,社区资料更多。二者的主要区别在许可证上。【PyQt有两种许可协议,一种是GPLv3许可协议,另一种是需要授权的商业许可协议,GPLv3许可协议是指,如果的你的程序引用了该协议的程序,则你的程序也必须开源,如果你想要商业闭源,则必须购买该公司的商业许可协议。后来Nokia公司希望PyQt的GPLv3协议修改改LGPLv3协议,可以吸引更多的商业用户,但是riverbank computing公司拒绝了,因此,Nokia公司单干,推出了PySide】

二,控件Widgets

(一)app和窗口

1,应用程序控件QApplication

QApplication 提供了整个图形界面程序的底层管理功能,比如:初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件等。这个控件必须第一个创建。

app = QApplication([])

2,主窗口空间QmainWindow

创建Qapplication之后什么都不发生,必须要创建窗口空间在写window.show()才会有弹窗,但这个弹窗是空白的,只有标题没有内容。

window = QMainWindow()

ps.这两个控件无父级控件

(二)功能控件

1,控件之间有嵌套关系,功能控件一般都有父级控件,一般为window。它们创建实例的时候,传的一个参数就是父亲名。

2,QplainTextEdit文本输入框控件

3,QpushButton按钮类。创建实例时,参数1写“按钮上显示的字”,参数2是父亲名。

4,QmessageBox消息弹窗。

三,信号与槽

1,当界面上一个控件被操作时,比如被点击、被输入文本、被鼠标拖拽等,就会发出信号signal。我们需要事先定义一个函数来处理signal,这种处理函数叫做slot。然后在到控件下面加一行代码把控件和函数连接起来。

控件对象.信号.connect(槽函数)

2,自定义信号

(1)默认信号一般是被点击click,还可以自定义信号,它需要代码手动发送。

(2)定义方法:my_signal = pyqtSignal(str)。必须写在类中方法外

(3)代码中emit的信号是什么类型的,在定义pyqtSignal时也写对应的参数

(4)对于普通信号,需要指定它是哪一个控件的,连接时写作控件对象.信号.connect(槽函数)但是自定义信号不属于某个控件,默认都是属于窗口的

(5)使用步骤

①创建pyqtSignal(xxx)的一个实例


pyqt的简介与使用说明_ide

pyqt的简介与使用说明_对象管理器_02

②连接信号与槽函数。写作:self.信号.connect(槽函数)


pyqt的简介与使用说明_ide_03

③定义槽函数。pyqtSignal创建实例时形参是什么样,槽函数形参也要是那样

④发送信号

3,一般使用

pyqt的简介与使用说明_ide_04

qt设计师来决定页面,但是信号与槽却不使用设计师,而是获取ui文件中的对象,在把对象连接到函数上面。

Ps,在qt设计师中,要注意在对象管理器中为对象重命名

四,如何引用.ui文件

1,有两种引用方法。直接加载.ui文件、使用uic把ui文件转换为py代码之后再引用代码。最好使用ui动态加载方式,因为它不需要转换十分方便。若程序里面有非qt designer提供的控件则需要使用转换为py的方式。

2,引用uic转换后py文件的两种方法

(1)直接在转换成的文件中加上mian函数

(2)新定义一个类,该类继承QD中创建窗口时选中的类型。主窗口是

五,Qt Designer


pyqt的简介与使用说明_控件_05

1,刚打开它时,会弹出创建window的提示。它只负责窗口,app需要去调用它的python中创建。我们一般选Widget,这是一个什么都没的空窗口。如果选Main Window的话会有菜单栏(点击之后出现选项,而非tab这种跳转页面的)。选完之后就会出现窗口,如果把那个窗口叉掉又会回到这个创建窗口的页面。


pyqt的简介与使用说明_对象管理器_06

2,左侧的是控件区域。右上的是对象区域,拖拽到画布上的控件都会出现在对象区域。右下的对象属性区域,给button命名,给窗口指定标题,给文本框加上预输入字,都需要到对象的属性中去编辑。往往一个对象会继承多个父类,所以它会有父类的许多属性,下图中是窗口的属性,右下有2个灰色的,Qobject就是窗口的父类。Qwidget才是它自己。窗体->预览可以看到实际效果。编辑完成后要给对象命名,再点保存,就能存为ui文件,ui后缀其实就是xml文件。

3,控件说明

(1)获取line edit控件中的内容使用text,获取出的是str类型的。若用户输入的是数字,想获取int类型则

num= int(self.ui.ic50_min.text())

plain text edit是上图这种多文本/纯文本输入框。双击它可以加入文字,但不是预显示的,而是一直都在。预显示需要搜索它的属性placeHolderText。获取其中内容必须使用.toPlainText()方法。

smiles = self.ui.smiles_text.toPlainText()

(2)spacers里面是占位符,如果想两个按钮之间加入一段空白,就能拖拽spacers放到里面。

(3)radio button是单选框。但是直接拖到窗口中的单选框会被视为一个父窗口,同时只能选中一个。若想分开,需要同时选中它们然后新建按钮组。

Check BOX是多选框。

(4)tab weight是标签页。

①如果想给标签页添加layout,需要该标签页中有内容。

②想要重命名标签页则在属性中搜索text,在currentTabText中修改。

③tab默认只有2个,想要增加则右键点击插入页。

(5)label控件用来显示一段字(类似于print)它的pixmap 属性中可以选择图片。用它可以显示图片self.ui.label_auc.setPixmap(QtGui.QPixmap(".pyqt/1.jpg"))

(6)combo BOX是下拉框。双击它就能在里面添加内容。

(7)progress bar是进度条。progressBar.setRange(0,5)把进度条分为了几部分,progressBar.setValue(3)是把进度条设置为第几,即60%。

(8)spinBOX是数字增加框,只能为整数。doubleSpinBox是小数增加框,属性decimals用来设置小数位数,默认2位。

使用value来获取其中的值。

epoch=self.ui.spinBox.value()

(9)line edit、text edit、plain text edit都是用户的文本输入框。line edit只能输入单行文本,后两个可以多行输入


pyqt的简介与使用说明_对象管理器_07

(10)

(11)text browser一般用来显示程序输出的提示信息,如用户登录界面,登录成功或失败,都可以用它来显示

4,布局layout


pyqt的简介与使用说明_对象管理器_08

(1)如果不进行布局的话,拖动窗口改变其大小时,里面的控件是固定不变的,不会随画布大小变化。仅当最顶层(窗口级别存在布局时)控件才会随画布改变。窗口级别没有布局时,它左边会有一个叉。

(2)布局的种类

QD提供4种布局,分别是:垂直布局、水平布局、九宫格布局(grid)、表单布局(姓名:输入框)

(3)布局的三种方式

①按住ctrl可以同时选中多个控件,右键点击布局就能选择对应布局了。

②在对象管理器中右击,比如右击window然后直接选择垂直布局,就可以在全局层面做一次布局了。

③在控件管理器中把布局拖进来,然后把控件拖进布局中

(4)若页面比较复杂,则需要从小组合开始布局。添加布局后有点像visio中的组合,也像前端中的div,小程序中的view。会有一个框框把这些控件框住,可以拖动框框改变整体的大小。若是水平布局,则控件水平排列,控件间是会平分布局长度的,所以控件直接间隔一样。

改变间隔的办法:假设有三个控件被组合在一起了,分别找到三个控件Qwidget类下面的sizePolicy->水平/垂直伸展属性(默认值都是0)。若3控件水平水平伸展分别设为1:2:1,则会把本布局(本div/view)平分为4份,控件1、3占一份,控件2占2份。

Ps.点击layout对象,修改它的Stretch属性,更加方便。

pyqt的简介与使用说明_对象管理器_09


(5)在布局时,一定要从小布到大,一直布到window层面存在布局。


pyqt的简介与使用说明_对象管理器_10

(6)下图中push button太大,不想让它独占一行,希望它们缩到正常按钮大小且居中。选中按钮,Qwidget->sizePolicy->水平策略,把Minimum改为fixed,Minimum会使按钮占整个行??,fixed使按钮恢复为它的原始大小(仅框住里面的字)。需要居中只要把它放进一个水平布局中就行了。一个元素无法用选中再右键布局的方式添加(这种方式必须同时选中2个以上控件)。只能从控件中拖进一个布局来,拖进来的布局会变成一条线而不是一个框,没办法把控件拖进布局中。此时需要把控件拖入对象管理器中多出来的布局中。

(7)对象管理器中选中布局,可以发现布局可以设置margin等。

(8)在进行布局时,千万不要去设置min、max尺寸什么的。只选中布局,任何设置其中的layoutStretch,设置比例。

5,按住ctrl键拖动就会变成复制。在visio中也是这样

6,在qt设计师中使用信号/槽编辑器。这里只能做一些特别简单的操作。这四个均是后会出现下拉框。发送者选push button,信号选click,接收者选label,槽选hidden,则在点击按钮之后,label中的字会隐藏。


pyqt的简介与使用说明_ide_11


六,发布可执行文件

1,在sh中执行

pyinstaller httpclient.py --noconsole --hidden-import PySide2.QtXml

加上—noconsole后,窗口就不会运行在cmd黑框框中了,而是只有一个窗口。Pyinstaller会把python解释器、py文件中import的所有包一起放到一个文件夹中。但是PySide2.QtXml文件是使用_ _import_ _方法导入的,无法自动打包,必须手动导入。写作--hidden-import PySide2.QtXml

另外,图片、excel、ui这些,它是不会帮你打包的。需要自己手动拷贝到 dist/pyhon文件名字目录中。

2,给QT窗口添加图标

from PySide2.QtGui import QIcon

app = QApplication([])

app.setWindowIcon(QIcon('logo.png'))

在发布程序时,要把图标也放进打包的文件夹中

3,指定应用程序的图标,发布exe时加上命令

pyinstaller httpclient.py --noconsole --hidden-import PySide2.QtXml --icnotallow="logo.ico"

注意图片后缀必须要是ico,可以用在线转换网站转换。这个图片不需要手动粘贴到文件夹中。

2,还有库叫做py2app,可以发布.app后缀的程序

七,QSS

1,类似于CSS,设置样式。

2,设置方式:

(1)在对象管理器中找一个“容器级别”的对象,在它的属性管理器中找到styleSheet。点击它,在出现的框框中输入CSS语句,如

QPushButton {

color: red ;

font-size:15px;

}

标签:控件,窗口,对象,简介,布局,pyqt,说明,ui,管理器
From: https://blog.51cto.com/u_16558817/9592696

相关文章

  • MongoDB - 理解业务场景、简介、特点和体系结构、数据类型等,部署Linux系统
    MongoDBNotesMongoDB用起来-快速上手理解MongoDB的业务场景、熟悉MongoDB的简介、特点和体系结构、数据类型等。能够在Windows和Linux下安装和启动MongoDB、图形化管理界面Compass的安装使用掌握MongoDB基本常用命令实现数据的CRUD掌握MongoDB的索引类型、索引管理、执行计......
  • pyqt报错、python报错:src/pyaudio/device_api.c:9:10: fatal error: portaudio.h: 没
    报错信息:-DNDEBUG-fwrapv-O2-Wall-fPIC-O2-isystem/home/devil/anaconda3/envs/91/include-fPIC-O2-isystem/home/devil/anaconda3/envs/91/include-fPIC-I/usr/local/include-I/usr/include-I/home/devil/anaconda3/envs/91/include/python3.10-csrc/pyaudio/d......
  • prompt简介(chatgpt)
    一、什么是Prompts(提示词)prompts(提示词)可以理解成:让GPT能精准Get到你意图的话,或者与GPT沟通的语言方式。​ 如果你给GPT的提示词质量不好,或者不到位,那么它给到你的,往往就是那种“像是一堆正确的废话堆积而成”的文字垃圾。所以,想要获得GPT高质量回答的第一步,就是先学......
  • dremio LivenessService 服务简单说明
    LivenessService是dremiobackend提供的一个http服务,提供了live(存活)以及metrics服务此服务在dremio集群中的每个节点上都会运行,以下是一些说明一些特点服务使用了jetty与官方dac的backend是不太一样,默认使用了jersey框架默认基于本地回环地址bind同时bind的端口是......
  • HDMI2.1之eARC简介-Dolby Atmos和DTS:X
    eARCeARC代表“enhancedAudioReturnChannel”(增强型音频返回通道),是一种用于音频传输的高级技术标准。它是HDMI(HighDefinitionMultimediaInterface,高清晰度多媒体接口)规范的一部分,旨在提供更高质量的音频传输和更多的功能。HDMI论坛提出HDMI2.1版时,一并新增的功能,其全名是E......
  • Markdown 语法说明
    嗯。。。是这样的,在园子里写随笔的时候,总感觉没有很方便、好看,但是!(是我不会用markdown的问题)偶然间发现了一篇博文(其实就是说明书模板),觉得讲的很详细,所以干脆就搬运过来了,以便下次写的时候学习一下格式目录欢迎使用Markdown编辑器功能快捷键合理的创建标题,有助于目录的生成如何改......
  • int main(int argc,char* argv[]) 参数详细说明
    argc:参数个数argv[]:参数内容注意:当程序直接运行,没有额外的命令行参数时,argc为1,因此argc至少为1,argv[]至少长度为1,即argv[0]存储程序的名称,argv[1]以后的元素为空上述两个参数在编译器内部运行无效,在命令行或终端运行发挥作用举例:假设需要两个整数参数进行加法......
  • HDF5(Hierarchical Data Format version 5)简介
    HDF5(HierarchicalDataFormat5)是一种用于存储和组织大量数据的文件格式。它最初由美国国家超级计算应用中心开发,现在由非营利性组织HDFGroup支持,其使命是确保HDF5技术的持续发展以及对HDF中存储的数据的持续可访问性。特点和优势1. 层次化结构:HDF5 文件采用层次化的数据结......
  • 交换机划分Vlan简介
    VLAN的定义:VLAN是英文VirtualLocalAreaNetwork的简称,又叫虚拟局域网,是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。要想划分VLAN,必须购买支持VLAN功能的网络设备。划分VLAN的作用:VLAN是为解决以太网的广播问题和安全性而提出的,一......
  • PyQt5+python AttributeError: 'QMainWindow' object has no attribute 'slot1'解决办
    Step1.原因分析因为以前写过pyqt5,所以还是有一定的基础的,但是最近重新写上位机的时候,突然发现以前的办法不好用了,以前就是直接从Qtdesigner创建完成后,使用指令生成一个py文件,从main文件中调用就可以了,这次发现,直接使用槽函数,会报错AttributeError:'QMainWindow'objec......