PyQt5-QtDesigner入门
程序的用户交互界面,英文称之为 UI (user interface)
当一个应用的 UI 比较复杂的时候,命令行方式就不便用户使用了,这时我们需要图形界面。
python图形界面开发
如果用 Python
语言开发 跨平台
的图形界面的程序,主要有3种选择:
-
Tkinter
基于Tk的Python库,这是Python官方采用的标准库,优点是作为Python标准库、稳定、发布程序较小,缺点是控件相对较少。
-
wxPython
基于wxWidgets的Python库,优点是控件比较丰富,缺点是稳定性相对差点、文档少、用户少。
-
PySide2、PyQt5
基于Qt 的Python库,优点是控件比较丰富、跨平台体验好、文档完善、用户多。
缺点是 库比较大,发布出来的程序比较大。
如果我们要开发的工具较小,界面比较简单,那我们可以选择Tkinter,如果控件较多功能较复杂,我们可以采用采用基于Qt的PySide2、PyQt5。
PySide2、PyQt5 简介
PySide2、PyQt5 都是基于著名的 Qt 库。
Qt库里面有非常强大的图形界面开发库,但是Qt库是C 语言开发的,PySide2、PyQt5可以让我们通过Python语言使用Qt。
但是 PySide2、PyQt5 这两者有什么区别呢?
可以形象地这样说: PySide2 是Qt的 亲儿子
, PyQt5 是Qt还没有亲儿子之前的收的 义子
(Riverbank Computing这个公司开发的)。
那为什么 PyQt5 这个义子 反而比 PySide2 这个亲儿子更出名呢?
原因很简单:PySide2 这亲儿子最近(2018年7月)才出生。
但是亲儿子毕竟是亲儿子,Qt准备大力培养,PySide2 或许更有前途。
已经在使用 PyQt5 的朋友不要皱眉, 两个库的使用 对程序员来说,差别很小:它们的调用接口几乎一模一样。
如果你的程序是PyQt5开发的,通常只要略作修改,比如把导入的名字从 PyQt5 换成 PySide2 就行了。反之亦然。
以下内容只讨论PyQt5 。
安装PyQt5
如果你选择PyQt5,直接执行
pip install pyqt5-tools
即可同时安装 PyQt5 和 一些重要的工具,比如 Qt designer。
Qt Designer 使用
当控件较多时,再手写前端代码就比较费时,我们应该把大多数时间放在后端逻辑代码的优化上。除此之外,很多时候代码运行时界面呈现的样子并不是我们想要的,可能控件位置有偏差,可能觉得这种布局并没有那么好看,需要反复修改代码再运行预览。效率很低。
其实,我们可以用QT界面生成器 Qt Designer
,拖拖拽拽就可以直观的创建出程序大体的界面。
怎么运行这个工具呢?
运行 Python安装目录下 Scripts\pyqt5designer.exe
这个可执行文件。
从左侧拖拽控件到右侧面板上进行界面设计,类似于Dreamvear。设计完成后生成一个.ui文件,里面是一个XML格式的界面定义。
比如设计界面如下(仅一个按钮):
图形保存为一个ui文件,如下。
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>464</width>
<height>422</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>200</x>
<y>150</y>
<width>61</width>
<height>61</height>
</rect>
</property>
<property name="text">
<string>button</string>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>
有两种方法来使用这个.ui文件。
一、动态加载UI文件
有了界面定义文件,我们就可以用一个Python程序来从文件中加载UI定义,并且动态创建一个相应的窗口对象,并“激活”窗口中的控件。
如下:
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.uic import loadUi
import sys
class MyMainForm(QWidget):
def __init__(self):
super().__init__()
loadUi("D:\\test\\1\\test.ui", self) #加载UI文件到self
#self.resize(600,800)
self.setFixedSize(550,550) # 固定大小
self.slot_init() # 初始化槽函数
'''初始化所有槽函数'''
def slot_init(self):
self.pushButton.clicked.connect(self.AA)
# 函数示例
def AA(self):
print('hello')
if __name__=='__main__':
app=QApplication(sys.argv)
w=MyMainForm()
w.show()
sys.exit(app.exec_())
运行结果:弹出刚才设计的界面,每点击一次按钮,就输出一句hello
二、转化UI文件为Python代码
还有一种使用UI文件的方式:先把UI文件直接转化为包含界面定义的Python代码文件,然后在你的程序中使用定义界面的类
pyuic5 -x Frame.ui -o Frame.py
这样就可以得到一个Frame.py
文件,运行这个python代码就可以得到刚刚设计的界面,但点击按钮不会有反应,想要“激活”这个按钮,仍需要另一个python代码。
如下:
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from Frame import Ui_Form
class MyMainForm(QMainWindow, Ui_Form):
def __init__(self):
super(MyMainForm, self).__init__()
self.setupUi(self)
self.setFixedSize(550,550) # 固定大小
self.slot_init() # 初始化槽函数
def slot_init(self):
self.pushButton.clicked.connect(self.AA)
def AA(self):
print('hello')
if __name__=='__main__':
app=QApplication(sys.argv)
w=MyMainForm()
w.show()
sys.exit(app.exec_())
运行结果:弹出刚才设计的界面,每点击一次按钮,就输出一句hello
那么我们该使用哪种方式比较好呢?动态加载还是转化为Python代码?
通常采用动态加载比较方便,因为改动界面后,不需要转化,直接运行,特别方便。
但是,如果 你的程序里面有非qt designer提供的控件, 这时候,需要在代码里面加上一些额外的声明,而且可能还会有奇怪的问题。往往就要采用 转化Python代码的方法。
本篇文章来至:学新通
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通
- 本文地址: https://www.swvq.com/boutique/detail/tanhcjikjg
- 联系方式: luke.wu#vfv.cc
-
Java 线程组构造方法源码
PHP中文网 08-30 -
C语言篇语法细节杂谈番外篇
Lonble 09-01 -
解决gradle下找不到符号错误
BananaAres 11-02 -
目标检测算法的优缺点和适用场景
A等天晴 09-24 -
我的多巴胺回来了双手奉上在rumble上下载视频的最佳秘诀
光崽子 10-01 -
thinkphp控制器的定义和使用
PHP中文网 05-28 -
60 KVM Skylark虚拟机混部-安装和配置
superman超哥 10-07 -
Word 里文字对齐4种方法推荐
码农阿宇 09-20 -
npm和node.js有什么关系吗
PHP中文网 06-21 -
Polly-故障处理和弹性应对很有一手
Code综艺圈 10-20