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

news2025/1/26 15:38:56

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 = 0
        self.b = 0
    def 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, QtWidgets

class 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, QMainWindow

class 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 ImageFilter
    self.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 = 0
	for i in range(n):
		x = np.random.uniform(a, b)
		y = np.random.uniform(0, fmax)
		if 0 <= y <= f(x):
			below += 1
			area = below / n * (b - a) * fmax
			return area
def f1(self,x):
	y=0
	y=eval(self.textEdit_f.toPlainText())
	return y

def 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=0
	try:
		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.coloradmin.cn/o/363397.html

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

相关文章

Elasticsearch集群内存占用高?用这招!

一、freeze index冻结索引介绍 Elasticsearch为了能够实现高效快速搜索&#xff0c;在内存中维护了一些数据结构&#xff0c;当索引的数量越来越多&#xff0c;那么这些数据结构所占用的内存也会越来越大&#xff0c;这是一个不可忽视的损耗。 在实际的业务开展过程中&#x…

实战——缓存的使用

文章目录前言概述实践一、缓存数据一致1.更新缓存类2.删除缓存类二、项目实践&#xff08;商城项目&#xff09;缓存预热双缓存机制前言 对于我们日常开发的应用系统。由于MySQL等关系型数据库读写的并发量是有一定的上线的&#xff0c;当请求量过大时候那数据库的压力一定会上…

3717: yuyu学数数

描述yuyu开始学数数了&#xff0c;她要爸爸给他一些火柴棍&#xff0c;她要拼出很多数来。yuyu每次说要拼什么数字&#xff0c;爸爸就得想想要给她几根&#xff0c;好累啊&#xff0c;于是就只好写程序了。输入输入数据有多组&#xff0c;每组占一行&#xff0c;每行一个非负整…

K_A12_030 基于STM32驱动Pulse sensor心率模块 上位机与OLED0.96双显示

K_A12_030 基于STM32驱动Pulse sensor心率模块 上位机与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明STM32 ADC采集:四、部分代码说明1、接线引脚定义STM32F103C8T6Pulse sensor心率模块五、基础知识学习与相关资料下载六、视频效果展示与程序资料获取七、…

计算机内存数值存储方式-原码、反码、补码

计算机内存数值存储方式 1、原码 一个数的原码(原始的二进制码)有如下特点&#xff1a; ①最高位做为符号位&#xff0c;0表示正,为1表示负 ②其它数值部分就是数值本身绝对值的二进制数 ③负数的原码是在其绝对值的基础上&#xff0c;最高位变为1 下面数值以1字节的大小描述…

Nginx——Nginx的基础原理

摘要 Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 是由俄罗斯人 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的&#xff0c;它已经在该站点运行超过两年半了。…

Jetson Xavier nx(ubuntu18.04)安装rtl8152网卡驱动和8192网卡驱动

含义 Bus 002 : 指明设备连接到哪条总线。 Device 003 : 表明这是连接到总线上的第二台设备。 ID : 设备的ID&#xff0c;包括厂商的ID和产品的ID&#xff0c;格式 厂商ID&#xff1a;产品ID。 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter:生产商名字和设备…

力扣-寻找用户推荐人

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;584. 寻找用户推荐人二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.其他总结前言 一、题目&#xff1a…

详解Linux多线程中锁、条件变量、信号量

一文读懂Linux多线程中互斥锁、读写锁、自旋锁、条件变量、信号量 Hello、Hello大家好&#xff0c;我是木荣&#xff0c;今天我们继续来聊一聊Linux中多线程编程中的重要知识点&#xff0c;详细谈谈多线程中同步和互斥机制。 同步和互斥 互斥&#xff1a;多线程中互斥是指多个…

SpringBoot+ActiveMQ-发布订阅模式(消费端)

ActiveMQ消息中间件的发布订阅模式 主题 topictopic生产端案例(配合topic消费端测试)&#xff1a;SpringBootActiveMQ Topic 生产端ActiveMQ版本&#xff1a;apache-activemq-5.16.5案例源码:SpringBootActiveMQ-发布订阅DemoSpringBoot集成ActiveMQ Topic消费端的pom.xml<?…

git之工作区暂存区和仓库区

工作区暂存区和仓库区 工作区 对于添加、修改、删除文件的操作&#xff0c;都发生在工作区中 暂存区 暂存区指将工作区中的操作完成小阶段的存储&#xff0c;是版本库的一部分 仓库区 仓库区表示个人开发的一个小阶段的完成 仓库区中记录的各版本是可以查看并回退的但是在暂…

uniapp小程序基于Android+vue校园考研论坛php

系统功能 本灾情救援系统主要包括两大功能模块&#xff0c;即用户功能模块和管理员功能模块。 &#xff08;1&#xff09;管理员模块&#xff1a;主要模块包括首页&#xff0c;个人中心&#xff0c;会员管理&#xff0c;话题分类管理&#xff0c;考研论坛管理&#xff0c;系统管…

python—xlwt模块详解

一、前言 xlwt模块是python中专门用于写入Excel的拓展模块&#xff0c;可以实现创建表单、写入指定单元格、指定单元格样式等人工实现的功能&#xff0c;一句话就是人使用excel实现的功能&#xff0c;这个扩展包都可以实现。 二、基础操作 1、创建workbook(创建excel) #创建…

识别项目风险的7种方法

成功的项目经理有一个共同的特点&#xff1a;能够识别和管理风险。本文主要讨论识别项目风险的七个方法。 何时识别风险 在项目开始的时候&#xff0c;风险暴露是最大的&#xff0c;不确定性很高。因为项目在开始的时候&#xff0c;信息比较少。明智的项目经理会在项目早期就…

python基础 | Numpy基础

文章目录&#x1f4da;数组操作&#x1f407;np数组的构造&#x1f955;np数组的构造&#x1f955;特殊补充&#x1f407;np数组的变形和合并&#x1f955;转置&#x1f955;合并操作&#x1f955;维度变换&#x1f407;np数组的切片和索引&#x1f955;一维数组索引与切片&…

嵌套走马灯Carousel

Carousel 的应用很广泛&#xff0c;基础用法这里不多做阐述&#xff0c;感兴趣的可以去element-gui了解Carousel 组件。 今天主要是梳理嵌套走马灯的逻辑&#xff0c;背景如下&#xff1a; 需要对项目做一个展示&#xff0c;项目可能有一个或多个&#xff0c;同时一个项目可能…

2023爱分析·云原生智能运维中台市场厂商评估报告:秒云(miaoyun.io)

目录 1. 研究范围定义 2. 云原生智能运维中台市场定义 3. 厂商评估&#xff1a;秒云&#xff08;miaoyun.io&#xff09; 4. 入选证书 1. 研究范围定义 数字化时代&#xff0c;应用成为企业开展各项业务的落脚点。随着业务的快速发展&#xff0c;应用的功能迭代变得越…

Scala集合详解(第七章:集合、数组、列表、set集合、map集合、元组、队列、并行)(尚硅谷笔记)

集合第七章:集合7.1 集合简介7.1.1 不可变集合继承图7.1.2 可变集合继承图7.2 数组7.2.1 不可变数组7.2.2 可变数组7.2.3 不可变数组与可变数组的转换7.2.4 多维数组7.3 列表 List7.3.1 不可变 List7.3.2 可变 ListBuffer7.4 Set 集合7.4.1 不可变 Set7.4.2 可变 mutable.Set7.…

蓝牙运动耳机什么牌子的好、运动蓝牙耳机排行榜推荐

近些年&#xff0c;户外运动兴起&#xff0c;运动耳机迎来爆发增长&#xff0c;拒绝运动乏味&#xff0c;追求健康运动方式&#xff0c;已经成为当下年轻人的共同诉求。跑步骑行听音乐&#xff0c;已经是运动爱好者再熟悉不过的操作&#xff0c;很多人在运动中离不开音乐的节奏…

双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)

双检测人脸防伪识别=人脸检测+活体检测+人脸识别 1.人脸关键点+语义分割 使用mediapipe进行视频人脸关键点检测和人像分割: import time import cv2 import mediapipe as mp import numpy as npmp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solution…