python可视化界面编程 pycharm_pycharm开发一个简单界面和通用mvc模板(操作方法图解)...

文章首先使用pycharm的 PyQt5 Designer 做一个简单的界面,然后引入所谓的“mvc框架”。

一、设计登录界面

下面开始第一个话题,使用pycharm的 PyQt5 Designer 做一个简单的界面。

上一篇最后,在pycharm中配置了PyQt5 Designer 和 uic,接下来,使用这些工具,开发一个界面。

1、首先打开 Designer1) 在左侧任意位置(下图桔色框内)点击右键,弹出菜单,在External Tools 选中 PyQt5 Designer

2020052711175270.png

2) 打开 Designer

2020052711175271.jpg

3) 选择Main Windows ,点击创建

2020052711175272.jpg

4)新窗口

2020052711175373.jpg

5)修改窗口标题

2020052711175374.jpg

6)保存到项目的main目录下,名称为 Main.ui

2020052711175375.png

2020052711175376.png

7) 转换图形文件为源代码

右键选中 Main.ui ,弹出菜单,选中 External Tools --> uic

2020052711175377.png

生成源代码 Ui_Main.py

底部提示:Process finished with exit code 0 , 其中 0 表示成功。

如果是 -1 表示执行失败。

2020052711175378.png

8)查看源代码

Designer图形工具设计后生成的源代码,图像定义的核心代码是 setupUi()方法。

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

# Form implementation generated from reading ui file 'D:\projects\pycharm\p377test\main\Main.ui'

#

# Created by: PyQt5 UI code generator 5.13.0

#

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

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName("MainWindow")

MainWindow.resize(800, 600)

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

MainWindow.setCentralWidget(self.centralwidget)

self.menubar = QtWidgets.QMenuBar(MainWindow)

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

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)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

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

9)总结

前面,用 PyQt5 Designer 设计了一个界面,保存为 ui 文件;

通过 uic 将 ui 文件转换成 py 代码。

这个py代码还不能执行,因为这些代码只是创建了界面的组件。

需要编写控制代码,才能显示界面。

二、通用mvc框架

引入mvc框架的可以解决图形界面代码覆盖的问题,实现界面和控制逻辑分离。

界面生成后,如果把控制逻辑也写进界面代码,下一次修改保存界面就会把控制逻辑代码覆盖。

因此,防止代码覆盖的角度,需要将控制逻辑和界面代码分离,这样无论如何怎样修改界面代码,也不影响控制逻辑的代码。

第二点,从设计模式为出发点,考虑客户端应用以及组件的控制方式,mvc模式是最佳的实践。通过将代码按照界面(View)、数据模型(Model)和控制逻辑(Control)进行划分,每一个部分关注应用的不同功能,代码分工清晰,责任明确。

1)新建控制代码

右键点击 main 目录,弹出菜单,选择 New -> Python File

2020052711175379.png

2020052711175380.png

2020052711175381.png

2)通用模板

在Main.py中,增加如下内容:

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

from PyQt5 import QtWidgets

import sys

from Ui_Main import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):

# ---------------------------------------------------------------------------------

#

# 初始化

#

# ---------------------------------------------------------------------------------

def __init__(self):

super(MainWindow, self).__init__()

self.setupUi(self)

if __name__ == '__main__': # 判断本文件是否是启动入口,__main__是系统赋给启动模块的变量值;

app = QtWidgets.QApplication(sys.argv) # 如果是启动文件,则创建 Application 实例 app

window = MainWindow() # 创建 MainWindow 的实例 window

window.show() # 显示窗口

sys.exit(app.exec_()) # 捕获 app 退出状态

这是一个通用的、最简单的模板。

通过 from Ui_Main import Ui_MainWindow导入图形界面的定义类。

通过继承的方式使用界面类,class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow),并在初始化方法中,调用图形定义代码 setupUi()

3) 设置源代码根目录

右键点击 main 目录,选择 Make Directory as --> Sources Root

2020052711175382.jpg

4) 运行

2020052711175383.png

2020052711175384.png

上面第3)、4)步图中的 main.py 应为 Main.py。

总结

到此这篇关于pycharm开发一个简单界面和通用mvc模板(操作方法图解)的文章就介绍到这了,更多相关pycharm开发界面和通用mvc模板内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

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

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

相关文章

全国计算机等级考试题库二级C操作题100套(第62套)

第62套: 给定程序中,函数fun的功能是:把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动(注:字符串的长度大于…

编译apache过程中出现如下错误及解决办法

在编译apache的过程中出现如下错误:no SSL-C headers foundconfigure: error: ...No recognized SSL/TLS toolkit detected解决办法:安装openssl-devel转载于:https://blog.51cto.com/tibet/1153481

tensorflow学习笔记七----------卷积神经网络

卷积神经网络比神经网络稍微复杂一些,因为其多了一个卷积层(convolutional layer)和池化层(pooling layer)。 使用mnist数据集,n个数据,每个数据的像素为28*28*1784。先让这些数据通过第一个卷积层,在这个卷积上指定一个3*3*1的fe…

matlab strfind用法,findstr和strfind区别

matlab中这两个字符串查找的函数findstr(), strfind()表明上看起来用法相似,效果也相似。一. findstr(s1,s2)--在较长的字符串中查找较短的字符串出现的次数,并返回其位置,因此无论s1,s2哪个为长字符串,位置在前在后都没有关系。例…

python发邮件给女朋友代码_python实现邮件发送完整代码(带附件发送方式)

实例一:利用SMTP与EMAIL实现邮件发送,带附件(完整代码) __author__ Administrator #codinggb2312 from email.Header import Header from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart import…

Ubuntu识别USB设备

参考:如何解决Ubuntu无法识别USB设备 作者:一只青木呀 发布时间:2020-08-28 21:02:00 网址:https://blog.csdn.net/weixin_45309916/article/details/108286829 目录1、U盘识别2、识别转换解决Ubuntu无法识别USB3.0方法一&#xf…

用ElasticSearch存储日志

介绍 如果你使用elasticsearch来存储你的日志,本文给你提供一些做法和建议。 如果你想从多台主机向elasticsearch汇集日志,你有以下多种选择: Graylog2 安装在一台中心机上,然后它负责往elasticsearch插入日志,而且你可…

解除单个文件的与svn服务器的关联

有些文件和个人开发环境有关不需要和svn服务器做同步,可以取消其和svn服务的关联。 右键选中要取消关联的文件,右键菜单 Tortoise SVN ---> unversion and add to ignore list 确定后,文件图标会变成一把小剪刀,说明已经…

java xml出错,Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException...

Java xml出现错误 javax.xml.transform.TransformerException: java.lang.NullPointerException解决办法:利用Java操作XML,在操作XML过程中,执行到最后一步,在利用Transformer进行XML转换时出现NullPointerException错误&#xff…

Ubuntu磁盘扩容及启动问题整理

参考:Ubuntu磁盘扩容及启动问题整理 作者:一只青木呀 发布时间: 2020-12-08 10:42:19 网址:https://blog.csdn.net/weixin_45309916/article/details/110850358 也可参照正点原子的:Ubuntu磁盘空间不足?一招…

函数求值需要运行所有线程_精读《深度学习 - 函数式之美》

1 引言函数式语言在深度学习领域应用很广泛,因为函数式与深度学习模型的契合度很高,The Beauty of Functional Languages in Deep Learning — Clojure and Haskell 就很好的诠释了这个道理。通过这篇文章可以加深我们对深度学习与函数式编程的理解。2…

IOS(常用移动终端设备) push实现通知中心

参考文章: http://blog.csdn.net/zhuqilin0/article/details/6527113 http://www.dozer.cc/2013/03/push-notifications-server-side-implement/ http://blog.sina.com.cn/s/blog_71ce775e0101b43e.html PushSharp:https://github.com/Redth/PushShar…

Ubuntu下无法看到共享文件夹的解决办法

参考:Ubuntu下无法看到共享文件夹的解决办法 作者:一只青木呀 发布时间:2020-08-07 10:09:04 网址:https://blog.csdn.net/weixin_45309916/article/details/107856157 今天早上起来突然发现共享文件夹的查看不到了,找…

MySQL提供了以下三种方法用于获取数据库对象的元数据

MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用SHOW语句获取元数据 MySQL用show语句获取元数据是最常用的方法&a…

laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档

发行版本说明由 学院君 创建于5年前, 最后更新于 11个月前版本号 #219641 views23 likes0 collects支持政策LTS版本,比如Laravel 5.1,将会提供两年的bug修复和三年的安全修复支持。这些版本将会提供最长时间的支持和维护。对于其他通用版本,只…

NYOJ-522 Interval

Interval 时间限制&#xff1a;2000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述There are n(1 < n < 100000) intervals [ai, bi] and m(1 < m < 100000) queries, -100000 < ai < bi < 100000 are integers.Each query contains an inte…

实现图书增删的代码_不仅仅是图书信息管理系统

点击蓝字 关注我们不仅仅是图书信息管理系统基于双链表&#xff0c;采用面向对象编程方法制作的图书管理系统❞效果演示root用户&#xff1a;账号&#xff1a;0&#xff0c;密码&#xff1a;0普通用户&#xff1a;账号&#xff1a;1001&#xff0c;密码&#xff1a;666666图书信…

HDU1846 - Brave Game【巴什博弈】

十年前读大学的时候&#xff0c;中国每年都要从国外引进一些电影大片&#xff0c;其中有一部电影就叫《勇敢者的游戏》&#xff08;英文名称&#xff1a;Zathura&#xff09;&#xff0c;一直到现在&#xff0c;我依然对于电影中的部分电脑特技印象深刻。 今天&#xff0c;大家…

Ubuntu18.04换源更新国内源

参考&#xff1a;Ubuntu18.04更新国内源 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-05 10:24:11 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107808268 树莓派换源博文&#xff1a;https://blog.csdn.net/zhuguanlin121/article/d…

php中解析数组,在PHP中解析多维数组

您应该在将数据解析为Smarty之前准备好数据。你可以这样做&#xff1a;$result array(array(name > Hockey Team 1, category_id > 1),array(name > Hockey Team 2, category_id > 2),array(name > Hockey Team 3, category_id > 3),array(name > Footba…