python操作界面_Python使用PyQt5的Designer工具创建UI界面

一、Designer-UI编辑器

Designer是pyqt5-tools带的工具,默认可以在Python安装目录下找到的。我的之前项目导入过pyqt5-tools,所以我直接全盘搜索到了。

QQ图片20181023103228.png

打开designer后,我们可以编辑我们想要的UI界面,下面是我编辑的测试界面:

QQ截图20181023102815.jpg

编辑好界面,点击保存 会生成一个.ui格式的文件。

二、将.ui文件转.py文件

使用Designer创建出来的.ui文件不能被python读取,所以我们需要转成.py格式

使用工具:pyuic5, 也在python的安装目录下。

QQ截图20181023103945.jpg

1.在pyuic5所在目录打开命令行(若已将pyuic5加入环境变量,则忽略此步骤)。

2.然后执行以下命令:

1

pyuic5-oD:\test.pyD:\test.ui

生成test.py内容如下:

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'C:\Users\Administrator.000\Desktop\log.ui'

#

# Created by: PyQt5 UI code generator 5.10.1

#

# WARNING! All changes made in this file will be lost!

fromPyQt5importQtCore,QtGui,QtWidgets

classUi_MainWindow(object):

defsetupUi(self,MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800,600)

self.centralwidget=QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.printLogButton=QtWidgets.QPushButton(self.centralwidget)

self.printLogButton.setGeometry(QtCore.QRect(190,30,381,51))

self.printLogButton.setObjectName("printLogButton")

self.textEdit=QtWidgets.QTextEdit(self.centralwidget)

self.textEdit.setGeometry(QtCore.QRect(150,190,461,341))

self.textEdit.setObjectName("textEdit")

self.clearLogButton=QtWidgets.QPushButton(self.centralwidget)

self.clearLogButton.setGeometry(QtCore.QRect(190,110,381,51))

self.clearLogButton.setObjectName("clearLogButton")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar=QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0,0,800,23))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar=QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

defretranslateUi(self,MainWindow):

_translate=QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))

self.printLogButton.setText(_translate("MainWindow","打印Log"))

self.clearLogButton.setText(_translate("MainWindow","清除Log"))

三、创建简单项目结构

我们新建个py项目,文件结构如下:

QQ截图20181023110010.jpg

下面来填充代码:

Entry.py(入口py脚本)

Python

1

2

3

4

5

6

importMainController

if__name__=='__main__':

mainController=MainController.MainController()

mainController.do()

MainView.py(将上一步生成的test.py内容copy进来)

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'C:\Users\Administrator.000\Desktop\log.ui'

#

# Created by: PyQt5 UI code generator 5.10.1

#

# WARNING! All changes made in this file will be lost!

fromPyQt5importQtCore,QtGui,QtWidgets

classUi_MainWindow(object):

defsetupUi(self,MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800,600)

self.centralwidget=QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.printLogButton=QtWidgets.QPushButton(self.centralwidget)

self.printLogButton.setGeometry(QtCore.QRect(190,30,381,51))

self.printLogButton.setObjectName("printLogButton")

self.textEdit=QtWidgets.QTextEdit(self.centralwidget)

self.textEdit.setGeometry(QtCore.QRect(150,190,461,341))

self.textEdit.setObjectName("textEdit")

self.clearLogButton=QtWidgets.QPushButton(self.centralwidget)

self.clearLogButton.setGeometry(QtCore.QRect(190,110,381,51))

self.clearLogButton.setObjectName("clearLogButton")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar=QtWidgets.QMenuBar(MainWindow)

self.menubar.setGeometry(QtCore.QRect(0,0,800,23))

self.menubar.setObjectName("menubar")

MainWindow.setMenuBar(self.menubar)

self.statusbar=QtWidgets.QStatusBar(MainWindow)

self.statusbar.setObjectName("statusbar")

MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

defretranslateUi(self,MainWindow):

_translate=QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow","MainWindow"))

self.printLogButton.setText(_translate("MainWindow","打印Log"))

self.clearLogButton.setText(_translate("MainWindow","清除Log"))

MainController.py(Control脚本,处理MainView逻辑)

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

importMainView

importsys

importrandom

fromPyQt5.QtWidgetsimportQApplication

fromPyQt5.QtWidgetsimportQMainWindow

fromPyQt5importQtCore,QtGui,QtWidgets

classMainController():

defdo(self):

app=QApplication(sys.argv)

mainWindow=QMainWindow()

self.mainView=MainView.Ui_MainWindow()

self.mainView.setupUi(mainWindow)

self.mainView.printLogButton.clicked.connect(self.printLogClick)

self.mainView.clearLogButton.clicked.connect(self.clearLogClick)

# 重定向输出

sys.stdout=EmittingStream(textWritten=self.normalOutputWritten)

sys.stderr=EmittingStream(textWritten=self.normalOutputWritten)

mainWindow.show()

sys.exit(app.exec_())

defprintLogClick(self):

print(random.random())

defclearLogClick(self):

self.mainView.textEdit.clear()

defnormalOutputWritten(self,text):

cursor=self.mainView.textEdit.textCursor()

cursor.movePosition(QtGui.QTextCursor.End)

cursor.insertText(text)

self.mainView.textEdit.setTextCursor(cursor)

self.mainView.textEdit.ensureCursorVisible()

classEmittingStream(QtCore.QObject):

textWritten=QtCore.pyqtSignal(str)

defwrite(self,text):

self.textWritten.emit(str(text))

当所有准备就绪后,我们来运行测试一下我们的成果吧~

QQ截图20181023105548.jpg

最后编辑:2020-10-09作者:网虫虫

42_avatar_big-1-150x150.gif

分享是一种快乐;

分享是一种美德;

分享是一种幸福!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python统计词频_Python统计四六级考试的词频

Python统计四六级考试的词频此文首发于公众号 「Python知识圈」, 欢迎直接去公众号查看阅读文本大概需要 4.6 分钟。今天是教师节,先祝天下所有老师教师节快乐,感谢您在我学生时代对我的谆谆教诲。现在是开学之初,风华正茂的青年才…

python爬虫数据可视化_适用于Python入门者的爬虫和数据可视化案例

本篇文章适用于Python小白的教程篇,如果有哪里不足欢迎指出来,希望对你帮助。 本篇文章用到的模块: requests,re,os,jieba,glob,json,lxml,pyecharts,heapq,collection 首先 本文我们的目的 抓取周杰伦的所有歌曲, 歌词&#xff0…

mysql中如何卸载插件_Eclipse中如何卸载插件

很久没用Eclipse了,今天打开的时候,突然报Android开发插件需要更新。打开插件管理页面,更新Android插件,又提示和旧版本有冲突,心想只能卸载了重新安装了。找了半天没找到在哪下载,把Eclipse目录下的plugin…

computed怎么使用_Vuex 基本使用

简单介绍iPhone X 是 iPhone, Vuex 并不是 Vue.我们查看官方文档可以知道:Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。怎么理解呢?就拿我两位数的资产的银行卡来说吧,基本的存钱取钱,就是状态管理。怎么用我们将以一个简…

windows安装python3步骤_Windows下python3和python2安装与一起使用

一、python2和python3安装 2、安装步骤,直接双击运行,记得勾选添加环境变量就可以。图片1.png 3、安装已经选择了添加这个环境变量,所以不用再去配置。 如果没有勾选,得自己去设置。 鼠标右键我的电脑 -> 属性 -> 点击高级系…

mysql ondelete_MySQL on delete cascade语句

在本教程中,您将学习如何使用MySQL ON DELETE CASCADE引用操作来执行外键从多个相关表中删除数据。在上一个教程中,我们学习了如何使用单个DELETE语句从一个或多个相关表中删除数据。但是,MySQL提供了一种更为有效的方法,称为ON D…

python构建二叉树_BinaryTree:学习二叉树的Python库

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。简介: 您是否在为考试、作业或技术面试学习二叉树? Binarytree是一个Python库,它通过一个简单的API生成二叉树,可以进行检查和操作。它让您…

mysql union as 注入_sql注入入门 之 mysql 常规注入 [ union方式 ]

1,常规数字型 mysql 实例注入点,如下:1https://www.vuln.com/md_materia_profile_view.php?viewid22,依旧先尝试下经典的单引号,如下,虽然没暴露出明显的数据库报错信息,但我们发现,此时返回的页面已经异常了,经验判断,十有八九是个注入点,先不管那么多,我们继续1https://www.…

gradle docker_带有Gradle的Docker容器分为4个步骤

gradle docker您是否需要通过Java Web应用程序创建Docker映像? 您在使用Gradle吗? 如果是这样,那么您距Docker nivana仅4步之遥。 对于此示例,我将使用一个简单的Spring Boot应用程序。 您可以在我的名为galoshe的Github存储库中…

python socket编程_Python学习记录-socket编程

1. OSI七层模型详解2. Python socket 什么是 Socket? Socket又称”套接字”,应用程序通常通过”套接字”向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。 Python 提供了两个级别访问的网络服务: 低级别的网络服…

判断frame是否已创建_类的创建

1. 士兵 许三多 有一把 AK47 2. 士兵 可以开火 3. 枪 能够 发射 子弹 4. 枪 装填 子弹---增加子弹数量 class Gun:def __init__(self,type):self.type type# 刚开始枪没有子弹self.bullet_count 0def __str__(self):return ("%s 已到位" % self.type)def shoot(sel…

@select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发

上一篇文章:《Mybatis基本知识十六:查询缓存之第三方查询缓存》若文中有纰漏,请多多指正!!!1.前言使用Mybatis进行开发,不仅可以使用mapper配置文件进行开发,也可以使用注解的方式。映射文件中无…

maven servlet配置_第一个Servlet配置

使用IntelliJ IDEA创建一个Simple Maven项目2. Add Framework Support3. 配置Tomcat打开菜单Run -> 选择Edit Configuration 如果侧边栏没有Tomcat,点击“”号 -> 选择“Tomcat Server” -> 选择“Local”,到此画面 ,Apply -> OK4. 在Tomcat…

ad域管理与维护_U-Mail邮件系统LDAP/AD同步极大提升办公效率

每一位办公族,可能都遇到过这样的问题:1、随着信息化高速发展和企业“互联网”的深入,越来越多的办公平台和软件被开发出来,正如移动互联网端APP应用层出不穷一样,给人们带来了极大地便利性。2、凡事有利有弊&#xff…

c语言c99标准_C语言的灵魂指针,配合这个新增的关键字,能够生成更高效的程序...

正如我前面的文章提到的,C语言虽然已经比较成熟,但是近些年来也是有所发展的——比如增加了许多新特性。遗憾的是,可能因为C语言程序员的工资比不过互联网程序员,国内很多教材比较老旧,几乎不涉及近些年来C语言新增的新…

java ee的小程序_Java EE 8 –为更多设备提供更多应用程序

java ee的小程序如果我不喜欢夏天的一件事,那就是事实是没有太多要分享或谈论的新闻。 谁决定将Java Day Tokyo置于今年的这个无聊的时间里,做得很好,并给了我一个写关于新的和即将到来的Java EE 8规范的博客帖子的机会,其中丰富了…

java随机姓名_Java生成随机姓名、性别和年龄的实现示例

一、定义实体类Person,封装生成的数据package net.dc.test;public class Person {private String name;private String sex;private int age;public String getName() {return name;}public void setName(String name) {this.name name;}public String getSex() {r…

matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21

数字图像处理期末复习2018-12-21愉快先生0.204字数 5547 阅读 18342018-12-22 19:35(数字图像冈萨雷斯第二版教材)一、基本原理图像的读取、存储操作:i imread(filename) ; imwrite(i,’image.jpg’); 图像显示的⽅法及区别:imshow(i); imshow(i,[]);%0…

大话oraclerac集群、高可用性、备份与恢复_Oracle RAC结构

Oracle RAC结构Oracle真正集群的出现是在Oracle公司收购Rdb并吸收了相关技术优势后,才正在推出了属于自己的RAC集群解决方案。RAC​和集群分类章节提到的集群系统有很多相似之处,从下图我们大概了解一下RAC集群的层次结构和所需的软硬件环境。Oracle Rac…

java obix_obix协议在java中的配置和使用详解

前言本文主要给大家介绍的是关于obix协议在java中的配置和使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。什么是 oBIX?简单来讲,obix是一种 XML 通讯协议,使用Http Request/Post方式进行数据通…