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 分钟。今天是教师节,先祝天下所有老师教师节快乐,感谢您在我学生时代对我的谆谆教诲。现在是开学之初,风华正茂的青年才…

易语言 字段重复_使对易失性字段的操作原子化

易语言 字段重复总览 易失性字段的预期行为是,它们在多线程应用程序中的行为应与在单线程应用程序中的行为相同。 禁止它们表现相同的方式,但是不能保证它们表现相同的方式。 Java 5.0中的解决方案是使用AtomicXxxx类,但是这些类在内存&…

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

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

qt4 连接mysql_Qt4访问mysql 数据库的简单教程

编译问题:1、系统中安装有VC,所以头文件冲突手工修改makefile删除所有-I 加载VC头文件的项目2、mysql cannot find -llibmysql指定libmysql.a的路径-LQt 4 访问 mysql 数据库的简单教程云帆 2006/5/18因为目前无法使用linux, 所以 Qt 4.1.2 是…

python多个函数_什么是在Python中使用多个构造函数的干净的、pythonic的方法?

其实None对于“魔法”价值观来说要好得多:class Cheese(): def __init__(self, num_holes None): if num_holes is None: ... 现在,如果您想完全自由地添加更多参数:class Cheese(): def __init__(self, *args, **kwargs): #args -- tuple o…

Java 8和Java 14之间的新功能

从版本9开始,Java每6个月就会有新功能,因此很难跟踪这些新更改。 互联网上的大多数信息都描述了最近两个Java版本之间的变化。 但是,如果您的情况与我相似,则说明您使用的不是Java的最新版本,而是使用了较旧的Java版本…

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

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

python io_NumPy IO

NumPy IO Numpy 可以读写磁盘上的文本数据或二进制数据。 NumPy 为 ndarray 对象引入了一个简单的文件格式:npy。 npy 文件用于存储重建 ndarray 所需的数据、图形、dtype 和其他信息。 常用的 IO 函数有: load() 和 save() 函数是读写文件数组数据的两个…

Java 14:instanceof的模式匹配

Java 14引入了pattern Matching for instanceof (另一种预览语言功能) ,从而消除了在使用instanceof时进行强制转换的需要。 例如,考虑以下代码: if (obj instanceof String) { String s (String) obj; System.out.pr…

centos7 mysql启动后端口_centos7 修改mysql5.7默认端口后启动异常

关闭selinux的方法有两种:临时关闭和永久关闭。查看selinux的状态:sestatus[root162-219-29-3 ~]# sestatusSELinux status: enabledSELinuxfs mount: /sys/fs/selinuxSELinux root directory: /etc/selinuxLoaded policy name: targetedCurrent mode: e…

computed怎么使用_Vuex 基本使用

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

自然数 素数 质数_在Java中获取素数的无限列表

自然数 素数 质数一个常见的问题是确定数字的素因式分解。 蛮力方法是审判部门( 维基百科 , 可汗学院 ),但是如果必须考虑多个数字,这需要大量的浪费工作。 一种广泛使用的解决方案是Eratosthenes筛( 维基…

mysql 大数据 join_MySQL JOIN算法原理

MySQL的JOIN相关操作,是通过“嵌套循环连接算法,NLJ”或者该算法的优化变体“块嵌套循环连接算法,BNLJ”来实现的。##### 嵌套循环连接算法两个表join时,可以简单理解为两层for循环,外层循环一般称作驱动表&#xff0c…

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…

您想了解的所有Throwable

本文是有关异常的教程。 但不是通常的一种。 其中有许多内容可以告诉您异常的含义,如何抛出异常,捕获异常,已检查异常与运行时异常之间的区别,等等。 没有必要了。 这对您来说也很无聊。 如果没有,那么请阅读其中的一本…

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存储库中…

mysql数据库连接关闭_解决mysql数据库连接自动关闭问题

MySQL是一个小型关系型数据库管理系统,由于MySQL体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。关于mysql自动关闭服务的现象,可以通过mysql服务器…