当前位置: 首页 > 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 作业

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

相关文章:

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

0 建议学时 4学时&#xff0c;在机房进行 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/simple1.2 环境配置 选择“…...

【论文简述】GMFlow: Learning Optical Flow via Global Matching(CVPR 2022)

一、论文简述 1. 第一作者&#xff1a;Haofei Xu 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;CVPR oral 4. 关键词&#xff1a;光流、代价体、Transformers、全局匹配、注意力机制 5. 探索动机&#xff1a;过去几年中具有代表性的光流学习框架的核心估计方式没有…...

【Spark分布式内存计算框架——离线综合实战】5. 业务报表分析

第三章 业务报表分析 一般的系统需要使用报表来展示公司的运营情况、 数据情况等&#xff0c;本章节对数据进行一些常见报表的开发&#xff0c;广告数据业务报表数据流向图如下所示&#xff1a; 具体报表的需求如下&#xff1a; 相关报表开发说明如下&#xff1a; 第一、数据…...

力扣-删除重复的电子邮箱

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;196. 删除重复的电子邮箱二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其…...

git基础

git-note Github Manual | GitHub Cheat Sheet | Visual Git Cheat Sheet 安装配置工具分支创建仓库.gitignore文件同步更改进行更改重做提交术语表 安装 desktop.github.com | git-scm.com 配置工具 对所有本地仓库的用户信息进行配置 对你的commit操作设置关联的用户名…...

postgres 源码解析50 LWLock轻量锁--1

简介 postgres LWLock&#xff08;轻量级锁&#xff09;是由SpinLock实现&#xff0c;主要提供对共享存储器的数据结构的互斥访问。LWLock有两种锁模式&#xff0c;一种为排他模式&#xff0c;另一种是共享模式&#xff0c;如果想要读取共享内存中的内容&#xff0c;需要在读取…...

JVM优化常用命令

jps列出正在运行的虚拟机进程jpstop列出线程CPU或内存占用top top -Hp pid //列出pid全部线程jstat监视虚拟机运行状态信息jstat -gc pid 5000 //每隔5s打印gc情况jmapjmap -heap pid //输出jvm内存情况 jmap -histo:live pid | more //查看堆内存中的对象数量和大小 jma…...

按键中断实验

gpio.c#include"gpio.h"//给gpio使能和设置为输入模式void hal_gpio_init(){//使能GPIOF控制器RCC->MP_AHB4ENSETR|(0x1<<5);//通过GPIOF_将pf9/pf7/pf8设置为输入模式 GPIOF->MODER&(~(0x3<<18));GPIOF->MODER&(~(0x3<<14));GPI…...

kubernetes入门介绍,从0到1搭建并使用

Kubernetes是一个容器编排系统&#xff0c;用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识&#xff0c;包括基本概念、安装部署和基础用法。 基础介绍 Kubernetes是Google开发的开源项目&#xff0c;是一个容器编排系统&#xff0c;可以自动化部署、…...

【C语言进阶】字符串函数与内存函数的学习与模拟实现

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C语言进阶 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录1.字符串处理函数介…...

【JavaEE初阶】第一节.多线程(进阶篇 ) 常见的锁策略、CAS及它的ABA问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、常见的锁策略 1.1 乐观锁 vs 悲观锁 1.2 普通的互斥锁 vs 读写锁 1.3 重量级锁 vs 轻量级锁 1.4 自旋锁 vs 挂起等待锁 1.5 公平…...

Linux基础命令-pstree树状显示进程信息

Linux基础命令-uname显示系统内核信息 Linux基础命令-lsof查看进程打开的文件 Linux基础命令-uptime查看系统负载 文章目录 前言 一 命令介绍 二 语法及参数 2.1 使用man查看命令语法 2.2 常用参数 三 参考实例 3.1 以树状图的形式显示所有进程 3.2 以树状图显示进程号…...

keepalived+LVS配置详解

keepalivedLVS配置详解keepalived简介keepalived的应用场景keepalived工作原理VRRP协议核心组件分层工作工作状态LVS简介LVS三种模式NAT模式(网络地址映射)IPTUN模式(IP隧道)DR模式(直接路由)三种模式对比keepalivedLVS配置1.master配置2. keepalived配置文件3 修改keepalived配…...

Unity之C#端使用protobuf

什么是protobuf protobuf全称Protocol Buffers&#xff0c;由Google推出的一种平台、语言无关的数据交互格式&#xff0c;目前使用最广泛的一种数据格式&#xff0c;尤其在网络传输过程中&#xff0c;有很强的安全性&#xff0c;而且数据量比json和xml要小很多。 最主要的是pr…...

C++设计模式(18)——模板方法模式

亦称&#xff1a; Template Method 意图 模板方法模式是一种行为设计模式&#xff0c; 它在超类中定义了一个算法的框架&#xff0c; 允许子类在不修改结构的情况下重写算法的特定步骤。 问题 假如你正在开发一款分析公司文档的数据挖掘程序。 用户需要向程序输入各种格式…...

SQLserver 索引碎片

Oracle 不需要整理碎片&#xff0c;原因&#xff1f; 1. rowid 默认的索引是&#xff22;&#xff0d;树索引。索引建立在表中的一个或多个列或者是表的表达式上&#xff0c;将列值和行编号一起存储。行编号是唯一标记表中行的伪列。 行编号是物理表中的行数据的内部地址&am…...

【Storm】【二】安装

1 准备 1.1 准备linux服务器 本文搭建的是3节点的集群&#xff0c;需要3台linux服务器&#xff0c;我这里使用的是centos7版本的linux虚拟机&#xff0c;虚拟机网络配置如下&#xff1a; 主节点&#xff1a; master 192.168.92.90 从节点&#xff1a; slave1 192.168.92.…...

Android ConditionVariable

Android ConditionVariable 线程操作经常用到wait和notify&#xff0c;用起来稍显繁琐&#xff0c;而Android给我们封装好了一个ConditionVariable类&#xff0c;用于线程同步。提供了三个方法block()、open()、close()。 void block() //阻塞当前线程&#xff0c;直到条件为…...

Action Segmentation数据集介绍——Breakfast

文章目录简介细节Cooking actibitiesillustration of the actions论文讲解Breakfast&#xff08;The Breakfast Action Dataset&#xff09;简介 早餐动作数据集包括与早餐准备相关的10个动作&#xff0c;由18个不同厨房的52个不同的人执行。该数据集是最大的完全带注释的数据…...

横道图时间标尺在P6软件中的设置

卷首语 由于其直观简洁且易于管理的特性&#xff0c;使其成为展示项目活动顺序及时间安排的最常用的进度管理工具。 甘特图 甘特图&#xff08;Gantt Chart&#xff09;&#xff0c;又称为横道图或棒条图&#xff0c;是最早的项目进度管理工具之一。由于其直观简洁且易于管理…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...

鸿蒙(HarmonyOS5)实现跳一跳小游戏

下面我将介绍如何使用鸿蒙的ArkUI框架&#xff0c;实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

云安全与网络安全:核心区别与协同作用解析

在数字化转型的浪潮中&#xff0c;云安全与网络安全作为信息安全的两大支柱&#xff0c;常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异&#xff0c;并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全&#xff1a;聚焦于保…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

性能优化中,多面体模型基本原理

1&#xff09;多面体编译技术是一种基于多面体模型的程序分析和优化技术&#xff0c;它将程序 中的语句实例、访问关系、依赖关系和调度等信息映射到多维空间中的几何对 象&#xff0c;通过对这些几何对象进行几何操作和线性代数计算来进行程序的分析和优 化。 其中&#xff0…...

虚拟机网络不通的问题(这里以win10的问题为主,模式NAT)

当我们网关配置好了&#xff0c;DNS也配置好了&#xff0c;最后在虚拟机里还是无法访问百度的网址。 第一种情况&#xff1a; 我们先考虑一下&#xff0c;网关的IP是否和虚拟机编辑器里的IP一样不&#xff0c;如果不一样需要更改一下&#xff0c;因为我们访问百度需要从物理机…...