本文利用python中的pyqt5包,设计一个计算PPI小程序的界面,再利用pyuic将界面的ui文件转为py文件。再新建一个py文件继承界面py文件中类,并定义每一个按钮对应的函数,完成后利用pyinstaller打包成exe程序直接运行使用。接下来将介绍整个程序的实现过程。

  • 前期安装准备(本文使用pycharm配合python3.7完成)
  • 建议使用pip install安装,安装后将designer和pyuic添加到external tools中
  • pyqt5
  • PyQt5-tools(这个里才有designer.exe)
  • pyinstaller

一、利用qtdesigner设计一个界面

  • 步骤
  • 1.pycharm->tools->external tools->qtdesigner
  • 2.新建一个Dialog without Buttons(选main window和widget也可以,这里建议与本文一致) (补充:三种窗口的区别)
  • 3.根据图片设计好程序界面
  • 4.保存为.ui文件

二、利用pyuic将ui文件转为py文件

  • 步骤
  • 1.在pycharm中打开保存的ui文件
  • 2.点tools->external tools->pyuic
  • 3.生成的py文件如下
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'ppi.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, QtWidgetsclass Ui_ppi(object):def setupUi(self, ppi):ppi.setObjectName("ppi")ppi.resize(458, 328)self.label = QtWidgets.QLabel(ppi)self.label.setGeometry(QtCore.QRect(120, 30, 211, 31))font = QtGui.QFont()font.setFamily("微软雅黑")font.setPointSize(18)self.label.setFont(font)self.label.setObjectName("label")self.groupBox = QtWidgets.QGroupBox(ppi)self.groupBox.setGeometry(QtCore.QRect(80, 80, 281, 171))self.groupBox.setObjectName("groupBox")self.label_2 = QtWidgets.QLabel(self.groupBox)self.label_2.setGeometry(QtCore.QRect(30, 40, 54, 12))self.label_2.setLayoutDirection(QtCore.Qt.LeftToRight)self.label_2.setAutoFillBackground(False)self.label_2.setAlignment(QtCore.Qt.AlignCenter)self.label_2.setObjectName("label_2")self.label_3 = QtWidgets.QLabel(self.groupBox)self.label_3.setGeometry(QtCore.QRect(30, 70, 54, 12))self.label_3.setAlignment(QtCore.Qt.AlignCenter)self.label_3.setObjectName("label_3")self.label_4 = QtWidgets.QLabel(self.groupBox)self.label_4.setGeometry(QtCore.QRect(30, 100, 54, 12))self.label_4.setAlignment(QtCore.Qt.AlignCenter)self.label_4.setObjectName("label_4")self.label_5 = QtWidgets.QLabel(self.groupBox)self.label_5.setGeometry(QtCore.QRect(30, 140, 54, 12))self.label_5.setAlignment(QtCore.Qt.AlignCenter)self.label_5.setObjectName("label_5")self.comboBox = QtWidgets.QComboBox(self.groupBox)self.comboBox.setGeometry(QtCore.QRect(100, 40, 151, 22))self.comboBox.setAcceptDrops(False)self.comboBox.setAutoFillBackground(True)self.comboBox.setEditable(True)self.comboBox.setObjectName("comboBox")self.comboBox.addItem("")self.comboBox.addItem("")self.comboBox_2 = QtWidgets.QComboBox(self.groupBox)self.comboBox_2.setGeometry(QtCore.QRect(100, 70, 151, 22))self.comboBox_2.setEditable(True)self.comboBox_2.setObjectName("comboBox_2")self.comboBox_2.addItem("")self.comboBox_2.addItem("")self.comboBox_3 = QtWidgets.QComboBox(self.groupBox)self.comboBox_3.setGeometry(QtCore.QRect(100, 100, 151, 22))self.comboBox_3.setEditable(True)self.comboBox_3.setObjectName("comboBox_3")self.comboBox_3.addItem("")self.comboBox_3.addItem("")self.comboBox_3.addItem("")self.comboBox_3.addItem("")self.comboBox_3.addItem("")self.comboBox_3.addItem("")self.result = QtWidgets.QTextEdit(self.groupBox)self.result.setGeometry(QtCore.QRect(100, 130, 151, 31))self.result.setObjectName("result")self.enter = QtWidgets.QPushButton(ppi)self.enter.setGeometry(QtCore.QRect(150, 260, 75, 23))self.enter.setObjectName("enter")self.clear = QtWidgets.QPushButton(ppi)self.clear.setGeometry(QtCore.QRect(240, 260, 75, 23))self.clear.setObjectName("clear")self.retranslateUi(ppi)QtCore.QMetaObject.connectSlotsByName(ppi)def retranslateUi(self, ppi):_translate = QtCore.QCoreApplication.translateppi.setWindowTitle(_translate("ppi", "Dialog"))self.label.setText(_translate("ppi", "计算屏幕PPI小程序"))self.groupBox.setTitle(_translate("ppi", "请输入"))self.label_2.setText(_translate("ppi", "长"))self.label_3.setText(_translate("ppi", "宽"))self.label_4.setText(_translate("ppi", " 英寸"))self.label_5.setText(_translate("ppi", "PPI"))self.comboBox.setItemText(0, _translate("ppi", "2560"))self.comboBox.setItemText(1, _translate("ppi", "1920"))self.comboBox_2.setItemText(0, _translate("ppi", "1440"))self.comboBox_2.setItemText(1, _translate("ppi", "1080"))self.comboBox_3.setItemText(0, _translate("ppi", "27"))self.comboBox_3.setItemText(1, _translate("ppi", "24"))self.comboBox_3.setItemText(2, _translate("ppi", "23.8"))self.comboBox_3.setItemText(3, _translate("ppi", "16"))self.comboBox_3.setItemText(4, _translate("ppi", "14"))self.comboBox_3.setItemText(5, _translate("ppi", "13.8"))self.enter.setText(_translate("ppi", "确定"))self.clear.setText(_translate("ppi", "清除"))

三、新建一个ppi_new.py

注意:调试的时候如果没有提示报错的具体原因:run->edit configurations->emulate terminal in output console

# -*- coding: utf-8 -*-
# 建议用from...import 可以减小程序大小(实际上还是有30多M,还没找到更好的办法)
from sys import argv,exit
# from PyQt5.QtWidgets import *
# from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow,QApplication
from ppi import Ui_ppiclass MainWindow(QMainWindow):def __init__(self, parent=None):super(MainWindow, self).__init__(parent) # 继承界面文件的属性,方便调用和修改,因为自动生成的界面py中有一句:WARNING! All changes made in this file will be lost!self.ui = Ui_ppi() # 调用界面类self.ui.setupUi(self) # 调用界面函数self.ui.clear.clicked.connect(self.clear) # 调用自定义的清除按钮self.ui.enter.clicked.connect(self.enter) # 调用自定义的确定按钮def enter(self):length = self.ui.comboBox.currentText() # 获取复选框中的内容width = self.ui.comboBox_2.currentText()inch = self.ui.comboBox_3.currentText()msg1 = self.calculate(length=length,width=width,inch=inch) # 计算结果ppi_result = str(round(msg1,2)) # 将数字转换为文本,并取2位小数,否则会报错格式不对应self.ui.result.setText(ppi_result) # 将结果发送到文本框中def calculate(self, length, width, inch):ppi_result = ((float(length)**2 + float(width)**2)**(1/2))/float(inch) # 定义函数,注意这里要加float否则会报错格式不对应return ppi_resultdef clear(self):self.ui.result.clear() # 定义清除按钮if __name__ == '__main__':app = QApplication(argv) # 初始化窗口win = MainWindow()win.show() # 运行程序exit(app.exec_()) # 退出窗口

四、用pyinstaller打包成exe程序

如果在pycharm中run能出现程序界面,并且正常执行功能,说明已经能正常使用,这时就可以用pyinstaller打包

  • 步骤
  • win+r->cmd->输入cd /d e:\qtdesigner\ppi
  • (注:进入ppi_new文件所在目录e:\qtdesigner\ppi\ppi_new.py)(这里要修改成自己的所在文件夹)
  • 输入pyinstaller -F ppi_new.py -w
  • (注-F为生成单文件exe, -w为运行时不显示命令行窗口)
  • 生成的exe文件在e:\qtdesigner\ppi\dist\ppi_new.exe
  • 双击exe文件运行

Pyqt5入门--用qtdesigner设计一个计算屏幕PPI小程序(qtdesigner/pyuic/pyinstaller/python)相关推荐

  1. 一个计算数独的小程序

    一个计算数独的小程序 #include<iostream> #include <string> #include <fstream> #include <cs ...

  2. 微信小程序全面实战,架构设计 躲坑攻略(小程序入门捷径教程)

    转自:http://www.cnblogs.com/dragondean/p/6247643.html 最近集中开发了两款微信小程序,分别是好奇心日历(每天一条辞典+一个小投票)和好奇心日报(轻量版) ...

  3. 生物信息学:任选一种编程语言,设计一个双序列全局比对的程序

    任选一种编程语言,设计一个双序列全局比对的程序.要求: 1) 输入两条蛋白质序列,输出比对结果例如: Alignment Score: 12345 E E E E E K K K K K A A A ...

  4. 设计一个基于GUI的扑克程序

    2019独角兽企业重金招聘Python工程师标准>>> 在本课程教材扑克牌代码的基础上,设计一个基于GUI的扑克程序 a) 可以显示 52 张扑克牌,包括洗牌,发牌在内(2) b) ...

  5. 如何用python写一个计算日期间隔的程序?

    如何用python写一个计算日期间隔的程序? 文章目录 如何用python写一个计算日期间隔的程序? 前言 问题梳理 问题解决 写在后面 前言 为什么想起来写一个这样的程序呢? 前几天聊天的时候,突然 ...

  6. 2020-2-15一个web登录注册小程序与Spring初始+作业

    文章目录 建立一个Web登录注册小程序 1.先在Mysql数据库中新建一个数据库 2.在IDEA中新建一个工程 3.对项目进行简单分层 4.设计一个实体类 5.引入一个jdbc工具类 6.写一个测试类 ...

  7. Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP)

    Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP) 说明:Java生鲜电商平台中,由于商品的架构很大程度决定了电商的扩展性与伸缩性.对此根据自己多年的生鲜电商经验,整理了以下的商品中 ...

  8. python计算学分绩点的程序_模拟登录教务系统计算GPA的小程序

    做了一些小游戏之后开始慢慢体会敲代码是件体力活,慢慢熬总能熬出来的.这几天又心血来潮想写个程序模拟登录教务系统计算GPA的小程序.不过之前没有一点点网络编程的经验,就趁着期中考后放假4天,一点点把坑填 ...

  9. 创建一个属于自己的小程序(注册开发账号)

    微信小程序入门指南 一. 如何创建一个属于自己的小程序 首先,需要注册一个小程序开发账号. 使用浏览器打开 https://mp.weixin.qq.com/ 网址,点击右上角的"立即注册& ...

最新文章

  1. python抠图_python和opencv实现抠图
  2. 数据中心可以从云计算学习可持续性运营
  3. docker --link容器互联
  4. boost::mp11::tuple_apply相关用法的测试程序
  5. kubernetes1.8.4 安装指南 -- 11. 安装kubernetes dashboard
  6. Java泛型详解:<T>和Class<T>的使用,泛型类
  7. MyBatis之查询缓存
  8. Java并发包中Semaphore的工作原理、源码分析及使用示例
  9. Android多线程的使用
  10. Gradle删除本地库文件
  11. JavaScript—— 常见网页特效
  12. 微信:公众号授权登录
  13. Android SQLite Google 官方用法
  14. PostgreSQL透明数据加密
  15. 从零开始学习信号完整性(SIPI)--2
  16. 显示无法定位程序输入点_CxxFrameHandler4于动态链接库,该怎么解决?
  17. seo文章批量更新-SEO文章自动批量生成
  18. [jzoj 1273] 袁绍的刁难 {推理}
  19. 【音频】音频基础知识
  20. 腾讯云搭载frp服务端-映射本地客户端到外网(小米路由pro内网穿透)

热门文章

  1. 手把手教你测试电商软件的好与坏
  2. 应届毕业生谈毕业的故事
  3. Overleaf:一个记笔记、写论文的神器
  4. jQuery实现抖音钟表转盘动画
  5. GOOGLE VR SDK开发VR游戏,VR播放器之二
  6. [附源码]SSM计算机毕业设计基于的考研408课程学习平台JAVA
  7. LabVIEW开发 XY Graph DoubleScale双刻度
  8. web前端 HTML常用标签,标签分类
  9. 会员卡计次卡会员管理系统,JavaScript Array 对象
  10. 服务器上的光信号出现红点怎么办,wifi 光信号显示红点(图文)