当前位置: 首页 > news >正文

GUI可视化应用开发及Python实现

0 建议学时

4学时,在机房进行

1 开发环境安装及配置

1.1 编程环境

安装PyCharm-community-2019.3.3
安装PyQt5

pip install PyQt5-tools -i https://pypi.douban.com/simple
pip3 install PyQt5designer -i https://pypi.douban.com/simple

1.2 环境配置

在这里插入图片描述
选择“Tools/External Tools”选项,单击添加“+”按钮,即可弹出外部工具配置窗口:
在这里插入图片描述
在弹出的外部工具配置窗口中,输入外部工具名称,这里用QtDesigner表示,接着输入Anaconda安装环境中的PyQt界面设计师可执行文件完整路径以及工作路径配置参数:
在这里插入图片描述
设置完后“Tools/ExternalTools”栏中增加了QtDesigner。
在这里插入图片描述
与上一节中配置QtDesigner外部工具操作一致,在“Tools/ExternalTools”中继续单击添加“+”按钮,命名为PyUCI
在这里插入图片描述

2 界面设计

在项目文件夹的Pycharm开发环境中,打开前面配置的外部工具QtDesigner:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
右键ui界面文件,选择“Tools/ExternalTools/PyUCI”(前面配置的外部工具),即可自动生成Python程序代码:
在这里插入图片描述
类与对象:
在这里插入图片描述

class Y:def __init__(self):self.a = 0self.b = 0def value(self, t):return self.a + self.b + t
y = Y() #创建实例(对象)
y.a=1
y.b=2
v = y.value(2) #计算函数值

界面代码:

from PyQt5 import QtCore, QtGui, QtWidgetsclass Ui_MainWindow(object):def setupUi(self, MainWindow):MainWindow.setObjectName("MainWindow")MainWindow.resize(591, 125)self.centralwidget = QtWidgets.QWidget(MainWindow)self.centralwidget.setObjectName("centralwidget")self.pushButton = QtWidgets.QPushButton(self.centralwidget)self.pushButton.setGeometry(QtCore.QRect(430, 20, 131, 41))font = QtGui.QFont()font.setFamily("微软雅黑")font.setPointSize(10)。。。self.retranslateUi(MainWindow)QtCore.QMetaObject.connectSlotsByName(MainWindow)

3 程序逻辑编写

新建文件ff.py:

import sys
from mygui import *    #界面生成的python文件名
from PyQt5.QtWidgets import QApplication, QMainWindowclass MyMainWindow(QMainWindow, Ui_MainWindow):   #界面生成的python文件中类名def __init__(self, parent=None):super(MyMainWindow, self).__init__(parent)self.setupUi(self)self.pushButton.clicked.connect(self.pushButtonClicked)  #指定按键代码def pushButtonClicked(self):   #按键后执行的代码data1 = float(self.textEdit.toPlainText())data2 = float(self.textEdit_2.toPlainText())self.textEdit_3.setText(str(data1+data2))if __name__ == '__main__':app = QApplication(sys.argv)myWin = MyMainWindow() #新建一个窗口实例myWin.show()  #显示窗口sys.exit(app.exec_())

运行程序:
在这里插入图片描述
【例1】加法器
在这里插入图片描述

self.pushButton.clicked.connect(self.pushButtonClicked)def pushButtonClicked(self):   data1 = float(self.textEdit.toPlainText())data2 = float(self.textEdit_2.toPlainText())self.textEdit_3.setText(str(data1+data2))

【例2】计算器
在这里插入图片描述

self.pushButton_0.clicked.connect(self.pushButton0Clicked)
def pushButton0Clicked(self):    self.textEdit.setText(str(self.textEdit.toPlainText() + "0"))self.pushButton_add.clicked.connect(self.pushButtonAddClicked)
def pushButtonAddClicked(self):self.textEdit.setText(str(self.textEdit.toPlainText() + "+"))def pushButtonEqualClicked(self):try:self.textEdit.setText(str(eval(self.textEdit.toPlainText())))except:QMessageBox.critical(self, "Question", "表达式不正确!",QMessageBox.Ok, QMessageBox.Ok)

【例3】图片处理
在这里插入图片描述

from PyQt5.QtWidgets import QApplication, QMainWindow,QFileDialog
from PIL import Image
from PIL import ImageFilterself.path = ""self.pushButton_Open.clicked.connect(self.openimage)self.pushButton_GetBorder.clicked.connect(self.FindBorder)
def openimage(self):imgName, imgIType = QFileDialog.getOpenFileName(None,"导入图片","", "*.jpg;;*.png;;All Files(*)")jpg = QtGui.QPixmap(imgName).scaled(self.label.width(), self.label.height())self.label.setPixmap(jpg)self.path = imgName # self.textEdit.setText('')def FindBorder(self):if self.path!="" :im=Image.open(self.path)om=im.filter(ImageFilter.CONTOUR)om.save("1.jpg")jpg = QtGui.QPixmap("1.jpg").scaled(self.label_out.width(), self.label_out.height())    self.label_out.setPixmap(jpg)

【例4】蒙特卡罗求定积分
在这里插入图片描述

 self.pushButton_cal.clicked.connect(self.Calculate)
def MCint_area(self,f, a, b, n, fmax):below = 0for i in range(n):x = np.random.uniform(a, b)y = np.random.uniform(0, fmax)if 0 <= y <= f(x):below += 1area = below / n * (b - a) * fmaxreturn area
def f1(self,x):y=0y=eval(self.textEdit_f.toPlainText())return ydef Calculate(self):a=int(self.textEdit_a.toPlainText())b = int(self.textEdit_b.toPlainText())n=int(self.textEdit_Count.toPlainText())fmax = int(self.textEdit_fmax.toPlainText())area=0try:area=self.MCint_area(self.f1, a, b, n, fmax)except:QMessageBox.critical(self, "Question", "表达式不正确,无法计算!")self.textEdit_result.setText(str(area))

4 生成EXE

安装pyinstaller包
使用pip installa安装命令即可pyinstaller编译包,
也可以在Anaconda Prompt下实现安装。
在这里插入图片描述

pip install PyInstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
编译不成功在项目文件夹下也会产生一个与项目名称相同的.spec文件
可用pycharm打开,查看问题
在这里插入图片描述

5 作业

制作一个与本专业有关的有界面程序,在窗口上写上姓名与学号。

http://www.lryc.cn/news/16393.html

相关文章:

  • 【论文简述】GMFlow: Learning Optical Flow via Global Matching(CVPR 2022)
  • 【Spark分布式内存计算框架——离线综合实战】5. 业务报表分析
  • 力扣-删除重复的电子邮箱
  • git基础
  • postgres 源码解析50 LWLock轻量锁--1
  • JVM优化常用命令
  • 按键中断实验
  • kubernetes入门介绍,从0到1搭建并使用
  • 【C语言进阶】字符串函数与内存函数的学习与模拟实现
  • 【JavaEE初阶】第一节.多线程(进阶篇 ) 常见的锁策略、CAS及它的ABA问题
  • Linux基础命令-pstree树状显示进程信息
  • keepalived+LVS配置详解
  • Unity之C#端使用protobuf
  • C++设计模式(18)——模板方法模式
  • SQLserver 索引碎片
  • 【Storm】【二】安装
  • Android ConditionVariable
  • Action Segmentation数据集介绍——Breakfast
  • 横道图时间标尺在P6软件中的设置
  • 空间复杂度(超详解+例题)
  • Document-Level event Extraction via human-like reading process 论文解读
  • H5盲盒抽奖系统源码
  • 低代码平台和无代码平台哪个更适合开发企业管理系统?
  • 75岁彪马再发NFT 复活美洲狮IP
  • 大学生成人插画培训机构盘点
  • 【算法基础】一维差分 + 二维差分
  • 游戏服务器框架 技能buff篇
  • 网友说socket通信讲的不彻底,原来这才是Socket
  • Nginx第二讲
  • redis(win版)