pythonGUI写一个exe桌面应用程序

本文详细介绍了如何使用pyinstaller、wxpython、wxFormBuilder等工具将PythonGUI程序打包成exe可执行文件,包括布局设计、图标转换、以及打包过程。同时,文中也讲解了控件的使用和事件处理方法。
摘要由CSDN通过智能技术生成
一、整体步骤
  • 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中创建一个带有图形用户界面(GUI)的桌面应用程序来实现字词拼矫正,你可以使用如Tkinter或PyQt这样的库。下面是一个使用Tkinter的基本框架,它允许用户选择文件并查看拼纠错建议: ```python import tkinter as tk from tkinter import filedialog from spellchecker import SpellChecker # 初始化拼检查器 spell = SpellChecker(language='zh') def check_spell(file_path): with open(file_path, 'r', encoding='utf-8') as f: content = f.read() # 分割文本为单词列表 words = content.split() misspelled_words = spell.unknown(words) if misspelled_words: print("发现以下拼错误的单词:") for word in misspelled_words: suggestions = spell.candidates(word) print(f"{word}: {suggestions}") # 在GUI中添加一个对话框展示建议 suggestion_popup(tk.Toplevel(), word, suggestions) else: print("文档中没有拼错误。") def suggestion_popup(window, word, suggestions): # 这里是一个简单对话框,只显示第一个建议 suggestion = suggestions[0] if suggestions else "无可用建议" message = f"单词 '{word}' 的建议:{suggestion}" popup_label = tk.Label(window, text=message) popup_label.pack() # 创建主窗口 root = tk.Tk() root.title("字词拼检查") # 文件选择按钮 browse_button = tk.Button(root, text="选择文件", command=lambda: select_file()) browse_button.pack() # 检查按钮 check_button = tk.Button(root, text="检查拼", command=lambda: check_spell(select_file())) check_button.pack() def select_file(): file_path = filedialog.askopenfilename() return file_path # 主循环 root.mainloop() ``` 这个程序会在用户点击“选择文件”按钮后弹出文件选择对话框,选择文件后会读取文件内容,检查拼错误,并在出现错误时显示一个带有建议的对话框。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值