您的当前位置:首页>全部文章>文章详情

【Python】pythonGUI写一个exe桌面应用程序

CrazyPanda发表于:2024-01-26 23:51:03浏览:341次TAG:
一、整体步骤
  • 1、安装pyinstaller 3.0

  • 2、安装wxpython

  • 3、安装布局工具wxFormBuilder

  • 4、将png生成icon

  • 5、upx391w(打包成exe程序)

二、工具安装
  • 安装布局工具(wxFormBuilder_v3.5.1-rc1.exe)

    • 下载地址:http://sourceforge.net/projects/wxformbuilder/files/wxformbuilder/3.1.70/

    • 教程地址:https://www.cnblogs.com/jikeboy/p/5648009.html

    • 教程地址:https://blog.51cto.com/yuyongid/1717514

  • 安装第三方库

    pip install pyinstaller
    pip install wxpython
  • 工具安装

    1、安装图像工具png2ico:绿色版解压即可
    2、安装打包工具upx391w:绿色版解压即可
三、布局工具使用
一、布局工具(wxFormBuilder)
第一步:准备一个窗体【forms 可以理解为html文件】
1、点击wxformbuilder上方的标签“forms”
2、并点击标签下方的第一个类似窗体的图标“Frame”
3、下面就会出现一个窗体
4、说明:但是现在还不能直接往窗体上添加各种控件。咱们还需要给窗体添加布局器BoxSizer

第二步:添加布局器【可以理解为html标签】
1、点击wxformbuilder上方的标签“Layout(倒数第3个)
2、并点击标签下方的图标“wxGridBagSizer”(顺数第5个)
3、添加一个只有以列控件布局的布局器
4、说明:窗体上并没有什么变化。但是窗口左边的目录树有变化了,窗体下布局器多了一个红色边框

第三步:放置控件【可以理解为标签元素】
控件介绍(左起)
1、wxbutton(按钮)
2、wxBitmapButton(问号提示按钮)
3、wxStaticText(文本)
4、wxTextCtrl(文本输入框)
    1、选中wxTextCtrl元素设置默认值
    2、value写入默认值
    3、控制自动换行:
       wxTextCtrl---style---勾选wx.TE_MULTILINE
5、wxComboBox(下拉选择框)
6、wxChoice(下拉选择框)
  1、选择下来元素
  2、添加下拉选项
     wxChoice---choices---点右边---添加选项
  3、selection:通过索引指定默认选项值,0表示选择第一个选项
7、wxListBox(大文本框)
8、wxListCtrl(大下拉选择框)

第四步:调整空间位置
控件属性说明
1、name:实体对象的变量名
2、label:GUI页面显示的名称
3、控件尺寸属性
   1、wxWindow---size:Width:宽度,height:高度
4、控件位置属性
   1、gbsizeritem--row,column:行,列起始值为0

四、png生成icon

1、将png2ico.ip解压到D:\png2ico
2、将要转化的png,切成如下规格的.png图片 248*248 128*128 64*64 48*48 32*35 16*16
3、将这些.png图片全放到D:\png2ico目录
4、在命令行,进入D:\png2ico
5、再在命令行执行命令:png2ico qq.ico logo248.png logo128.png logo64.png logo48.png logo32.png logo16.png
6、执行完,程序会在D:\png2ico目录生成qq.ico

五、exe程序打包工具(upx391w)

"""
pyinstaller  打包
1、安装upx391w(解压即可)
2、在upx391w里面新建文件夹,将需要打包的.py文件放进去
3、cmd进入该目录执行命令:pyinstaller -wF dFraud.py  realName.py start.py --upx-dir upx391w
4、upx391w\build01\dist  目录下会生成.exe文件
pyinstaller -wF --icon=D:\20170508\upx391w\build01\qq.ico dFraud.py  realName.py start.py  --upx-dir upx391w
"""
1、把需要打包的py文件放到这个目录下,新建一个文件夹里面放需要打包的py文件
2、cmd 到这个新建的文件夹下
3、执行命令
如果是在build目录下就不需要加F参数
pyinstaller -wF --icon=qq.ico demo01.py  --upx-dir upx391w
在外面目录
pyinstaller -wF --icon=D:\20170508\upx391w\build01\qq.ico dFraud.py  realName.py start.py  --upx-dir upx391w
六、函数使用
1、文本框赋值
self.m_textCtrl104.SetValue(u'哇靠,发布借款报错了')
2、获取文本框内容
value = self.m_textCtrl1.GetValue()
3、获取下拉框的值
value = self.m_choice1.GetCurrentSelection()
4、事件函数语法
def test_fun(self,event):
        #event:接收self.Bind方法的event参数,名字可以随便写
        self.m_textCtrl32.SetValue('嗯,测试成功')
5、事件绑定
"""
handler:绑定函数
source:绑定按钮
"""
self.Bind(event=wx.EVT_BUTTON,handler=self.button1,source=self.m_button1)

七、完整例子

"""
event:接收self.Bind方法的event参数,名字可以随便写
value = self.m_textCtrl1.GetValue()  获取文本内容
value = self.m_choice1.GetCurrentSelection() 获取下拉框的值
self.m_textCtrl2.SetValue(response.json())  # 设置文本框的值
"""
import requests
import wx
import wx.xrc
import ast
import json
class MyFrame1(wx.Frame):

    def __init__(self, parent):
        wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition,
                          size=wx.Size(900, 560), style=wx.DEFAULT_FRAME_STYLE | wx.MINIMIZE_BOX)

        self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize)

        gbSizer1 = wx.GridBagSizer(0, 0)
        gbSizer1.SetFlexibleDirection(wx.BOTH)
        gbSizer1.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED)

        self.m_staticText1 = wx.StaticText(self, wx.ID_ANY, u"接口地址", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText1.Wrap(-1)
        gbSizer1.Add(self.m_staticText1, wx.GBPosition(0, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_textCtrl1 = wx.TextCtrl(self, wx.ID_ANY, u"http://httpbin.org/post", wx.DefaultPosition,
                                       wx.Size(300, -1), 0)
        gbSizer1.Add(self.m_textCtrl1, wx.GBPosition(0, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_staticText2 = wx.StaticText(self, wx.ID_ANY, u"请求参数", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText2.Wrap(-1)
        gbSizer1.Add(self.m_staticText2, wx.GBPosition(1, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_textCtrl2 = wx.TextCtrl(self, wx.ID_ANY, u"{\n\"user_name\":\"admin\",\n\"passwd\":\"123456\"\n}",
                                       wx.DefaultPosition, wx.Size(300, 100), wx.TE_MULTILINE)
        gbSizer1.Add(self.m_textCtrl2, wx.GBPosition(1, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_staticText3 = wx.StaticText(self, wx.ID_ANY, u"请求类型", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText3.Wrap(-1)
        gbSizer1.Add(self.m_staticText3, wx.GBPosition(2, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        m_choice1Choices = [u"POST", u"GET"]
        self.m_choice1 = wx.Choice(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, m_choice1Choices, 0)
        self.m_choice1.SetSelection(0)
        gbSizer1.Add(self.m_choice1, wx.GBPosition(2, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_staticText4 = wx.StaticText(self, wx.ID_ANY, u"响应结果", wx.DefaultPosition, wx.DefaultSize, 0)
        self.m_staticText4.Wrap(-1)
        gbSizer1.Add(self.m_staticText4, wx.GBPosition(3, 0), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_textCtrl3 = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(300, 300), wx.TE_MULTILINE)
        gbSizer1.Add(self.m_textCtrl3, wx.GBPosition(3, 1), wx.GBSpan(1, 1), wx.ALL, 5)

        self.m_button1 = wx.Button(self, wx.ID_ANY, u"发送请求", wx.DefaultPosition, wx.DefaultSize, 0)
        gbSizer1.Add(self.m_button1, wx.GBPosition(0, 2), wx.GBSpan(1, 1), wx.ALL, 5)

        self.SetSizer(gbSizer1)
        self.Layout()
        self.Centre(wx.BOTH)

        #绑定事件
        self.Bind(event=wx.EVT_BUTTON, handler=self.test_fun, source=self.m_button1)

    def __del__(self):
        pass

    def test_fun(self,event):
        try:
            url = self.m_textCtrl1.GetValue()
            data = self.m_textCtrl2.GetValue()
            method_num = self.m_choice1.GetCurrentSelection()
            method = "POST" if method_num == 0 else "GET"
            response = requests.request(method,url,json=ast.literal_eval(data))
            self.m_textCtrl3.SetValue(json.dumps(response.json(),indent=4))  # 设置文本框的值
        except Exception as e:
            self.m_textCtrl3.SetValue(e)

if __name__ == '__main__':
    app = wx.App(False)
    test = MyFrame1(None) # 创建窗口
    test.Centre() # 窗口居中
    test.Show() # 显示窗口
    app.MainLoop() # 运行程序

猜你喜欢

【Python】如何使用Python在Linux中进行脚本编写和执行
如何使用Python在Linux中进行脚本编写和执行在Linux操作系统中,我们可以使用Python编写并执行各种脚本。Python是一种简洁而强大的编程语言,它提供了丰富的库和工具,使得脚本编写变得更加简单和高效。下面我们将介绍在Linux中如何使用Python进行脚本编写和执行的基本步骤,同时提供一些具体的代码示例来帮助你更好地理解和运用。安装Python首先,你需要在Linux中安装Python。大部分Linux发行版中已经预装了Python,你可以通过命令行输入以下命令来检查是否已经安装
发表于:2024-01-19 浏览:286 TAG:
【Python】Pandas教程:利用该库读取Excel文件的方法
Pandas教程:如何使用该库读取Excel文件,需要具体代码示例概述:Pandas是一个强大且灵活的数据处理和分析工具,被广泛应用于数据科学和数据处理领域。其中一个常见的应用是读取和处理Excel文件。本教程将向您展示如何使用Pandas库来读取Excel文件,并提供具体的代码示例。安装Pandas:首先,确保您已经安装了Pandas库。您可以使用以下命令在命令行中安装Pandas:pip install pandas读取Excel文件:在开始之前,确保您已经有一个Exce
发表于:2024-01-10 浏览:285 TAG:
【Python】如何使用Python实现迪杰斯特拉算法
如何使用Python实现Dijkstra算法?引言:Dijkstra算法是一种常用的单源最短路径算法,可以用于求解带权重的图中两个顶点之间最短路径的问题。本文将详细介绍如何使用Python实现Dijkstra算法,包括算法原理和具体的代码示例。算法原理Dijkstra算法的核心思想是通过不断地选择当前离源点最近的顶点来逐步确定从源点到其他顶点的最短路径。算法主要分为以下几个步骤:(1) 初始化:将源点到其他顶点的距离都设置为无穷大,源点到自己的距离为0。同时,创建一个记录最短路径的字典和一个用于
发表于:2024-01-16 浏览:288 TAG:
【Python】如何升级Python的pip工具
span style="text-wrap: wrap;">解决常见问题:Python升级pip的实用指南导言:Python是一种流行的高级编程语言,拥有强大的生态系统和广泛的第三方库。而pip是Python的默认包管理工具,用于安装和管理Python包。然而,随着时间的推移,pip的版本可能会变得过时,不支持某些新功能或存在安全漏洞。为了确保我们能够得到最新的功能和修复的漏洞,我们需要升级pip。本文将为您提供一些实用的指南和具体的代码示例。一、使用命令行升级pip打开命令行工具(Windows用户可以使用cmd或PowerShell,macOS或Li</span
发表于:2024-01-18 浏览:277 TAG:
【Python】高效技巧:使用Pandas删除DataFrame的特定列数据
实用技巧:利用Pandas删除DataFrame中的某一列数据,需要具体代码示例在数据处理和分析中,Pandas 是一款非常强大的工具。它提供了各种功能,以便处理和操作数据。在实际的数据处理中,经常需要删除DataFrame中的某一列数据,以满足分析的需要。本文将介绍如何使用Pandas删除DataFrame中的某一列数据,并给出具体的代码示例。在开始之前,让我们先来创建一个示例DataFrame,以便进行后续的操作。import&nbsp;pandas&nbsp;as&nbsp;pd #&amp;n
发表于:2024-01-10 浏览:307 TAG:
【Python】了解Django框架:从入门到精通
Django是一个流行的Python Web框架,它为开发Web应用程序提供了一种高效而强大的方式。本文将从入门到精通,介绍Django的基础知识,并提供具体代码示例。安装Django在使用Django之前,需要确保已在计算机上安装了Python。然后,可以使用以下命令安装Django:pip&nbsp;install&nbsp;Django创建Django项目要创建一个新的Django项目,可以使用以下命令:django-admin&nbsp;startproject&nbsp;&lt;pro
发表于:2024-01-19 浏览:303 TAG:
【Python】Python中的列表和元组的性能比较和选择原则是什么?
Python中的列表和元组的性能比较和选择原则是什么?在Python中,列表和元组是两种常见的数据结构。它们都可以用来存储一组数据,但有一些重要的区别。本文将从性能角度比较列表和元组,并给出选择原则的建议。访问速度:在访问单个元素时,元组的性能通常比列表更好。这是因为元组是不可变的,所以Python可以在内存中更快地定位元组的元素。而列表是可变的,每次访问元素都需要进行一系列的索引操作和操作内存访问。下面是一个测试示例,比较了访问列表和元组中相同位置元素的时间:import&nbsp;timei
发表于:2024-01-21 浏览:324 TAG:
【Python】深入解析matplotlib安装教程:必须掌握的Python初学者指南
作为一门高级编程语言,Python 在数据可视化中的应用非常广泛,而 matplotlib,作为 Python 中的一个数据可视化库,可以帮助我们轻松地处理图表绘制、数据可视化等问题。在学习 Python 数据可视化过程中,matplotlib 的安装方法是首要问题。以下是一个简单的Python初学者的必备教程,来详细解释一下matplotlib安装的方法。安装matplotlib之前在安装 matplotlib 之前,确保你使用的是 Python 3.x版本,同时在安装前建议先升级pip版本。
发表于:2024-01-17 浏览:341 TAG:
【Python】学习Python人工智能库的核心技能,构建智能应用
打造智能应用:掌握Python人工智能库的核心技能,需要具体代码示例摘要:本文旨在介绍如何使用Python人工智能库开发智能应用。首先,我们将简要介绍Python人工智能库的重要性和应用领域。接下来,我们将重点介绍四个核心技能,包括数据处理、机器学习、深度学习和自然语言处理。我们将通过具体的代码示例和实践案例,深入讲解如何应用这些技能来打造智能应用。引言人工智能是当今科技界炙手可热的话题,而Python作为一种高效简洁的编程语言,拥有丰富的人工智能库,如NumPy、SciPy、TensorFlo
发表于:2024-01-02 浏览:371 TAG:
【Python】Python程序用于按列对2D数组进行排序
当声明二维数组或二维数组时,它被视为矩阵。所以,我们知道矩阵由行和列组成。按升序或降序对属于矩阵特定列的元素进行排序的过程称为跨列对 2D 数组进行排序。让我们考虑一个算法和一个输入输出场景,以了解这个概念的确切应用。输入输出场景考虑一个二维数组。arr&nbsp;=&nbsp;&nbsp;[[&nbsp;7,&nbsp;9,&nbsp;5,&nbsp;7&nbsp;],&nbsp;[9,&nbsp;5,&nbsp;9,&nbsp;4],&nbsp;[2,&nbsp;7,&nbsp;8,&amp;nbs
发表于:2024-01-14 浏览:323 TAG: