py打包exe,用python做一个图形化界面

目录

效果展示

一、前言

二、正文

(一)tkinter部分

1、导入tkinter

2、新建窗口

3、tkinter部分全部代码

(二)后端部分

1、变量

2、函数

三、封装

四、全部代码

五、结语


效果展示

一、前言

如果您只想使用此功能,可以直接前往下载原文件,注:需安装python。

(我使用的python版本为3.11)

一共需要用到三个库,分别是python自带的os库和需要自行安装的tkinter库、pyinstaller库。

os库:用于调用cmd

tkinter库:用于制作可视化的窗口

pyinstaller:直接在cmd中运行,用于打包py

如果您已经安装python,但是没有后面这两个库,可以在cmd中输入以下命令以安装:

pip install pyinstaller
pip install tkinter

当然,如果您觉得下载速度慢,也可以使用国内源下载:

pip install -i pyinstaller https://pypi.tuna.tsinghua.edu.cn/simple/
pip install -i tkinter https://pypi.tuna.tsinghua.edu.cn/simple/

好的,到这里,准备工作就告一段落了。


二、正文

(一)tkinter部分

1、导入tkinter

在这里,需要有三行来导入tkinter:

from tkinter import *
from tkinter import simpledialog
from tkinter import messagebox

 现在您可能会有疑问:为什么需要三行导入?第一行不就足够了吗?

但是,当您试验的时候会发现simpledialog和messagebox无法被识别,所以需要多加两行。

2、新建窗口

现在,您已经将库导入了,所以我们该建一个窗口了。

首先建一个主窗口:

window = Tk()
window.geometry('250x350')#窗口大小
window.title('py转exe by sraxc')#标题

当然,最后不能少了循环,否则窗口只会昙花一现:

window.mainloop()

我们现在已经把主窗口的名字设置为window了。

现在进行调试,就会发现已经可以打开一个窗口了。

接下来就是添加各种控件了。

第一种:标签

l1 = Label(window,text="py文件绝对路径或相对路径")
l1.pack()

前面的l1是标签的名字,window是指显示在主窗口,text="  "是显示的文字

第二种:输入框

e1 = Entry(window)
e1.pack()

e1是名字,window是指显示在主窗口。

第三种:单选框

因为pyinstaller提供了一些可选项,所以我选择了几个最常用的进行编写,后面如果有需要也可以再加入。

radio1 = IntVar()
R1 = Radiobutton(window, text="是", variable=radio1, value=1, command=in1)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio1, value=2, command=in1)
R2.pack( anchor = W )

这样,当我们选择其中一个选项时即可将其的值(value)导入到radio1变量里。

第四种:弹出式输入框

因为.ico图标是一个可选项,而选择后还需要添加.ico图标的路径,于是我在此做了一个防呆设计,只有你选择“是”才会弹出窗口让你填写。

simpledialog.askstring(title = '输入',prompt='请输入ico图标绝对路径或相对路径')

title是标题,prompt是显示的文字,效果如下:

当然,只要规定一个变量,便可以把输入的文字存储为变量。示例如下:

ret = simpledialog.askstring(title = '输入',prompt='请输入ico图标绝对路径或相对路径')

此时ret内便存储着您输入的路径。

第五种弹出式信息框

当我们全部参数都输入完成后,可以再弹出一个窗口,显示您的所有选择,用以确认信息,再次点击确认即可开始运行。

re = messagebox.askquestion(title = '确认框 by sarxc',message= nr)

其实上面的函数可以不用规定变量,但是一会儿这个变量是有用的,这个变量存储的是您的选择——“yes”或“no”。

至此,关于本文中使用到的tkinter的功能便告一段落了。

3、tkinter部分全部代码

from tkinter import *
from tkinter import simpledialog
from tkinter import messagebox

window = Tk()
window.geometry('250x350')
window.title('py转exe by sraxc')
l1 = Label(window,text="py文件绝对路径或相对路径")
l1.pack()

e1 = Entry(window)
e1.pack()

l2 = Label(window,text="是否添加ico图标")
l2.pack()

radio1 = IntVar()
R1 = Radiobutton(window, text="是", variable=radio1, value=1, command=in1)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio1, value=2, command=in1)
R2.pack( anchor = W )

l3 = Label(window,text="是否生成一整个exe文件?[建议选是]")
l3.pack()

radio2 = IntVar()
R1 = Radiobutton(window, text="是[建议]", variable=radio2, value=1, command=in2)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio2, value=2, command=in2)
R2.pack( anchor = W )

l4 = Label(window,text="是否允许显示控制台窗口?")
l4.pack()

l5 = Label(window,text="(如您是直接在命令行中运行建议选是)")
l5.pack()

radio3 = IntVar()
R1 = Radiobutton(window, text="是", variable=radio3, value=1, command=in3)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio3, value=2, command=in3)
R2.pack( anchor = W )

button = Button(window,text ='开始',command = seeall)
button.pack()

window.mainloop()

(二)后端部分

1、变量

1.获取单选框的值

使用的是get函数,语法如下:

a = int(radio1.get())

我们知道,在函数中声明变量为局部变量,所以此处的if可以使用一样的变量。

2.声明全局变量

我们需要在其他函数中也可以使用的变量,这时我们就要声明全局变量了。在这里,我使用的是python自带的global。

global r1

2、函数

1.关于单选框的函数

我们已经做好了单选框,现在就是单选框的函数部分了,这其中有两类,一类是第2、3项的只在主窗口中运行,另一类是第一项的弹出输入框。

对于第一类:

def in2():
    a = int(radio2.get())
    global r2
    global s2
    if a == 1:
        r2 = " -F"
        s2 = "是"
    else:
        r2 = ""
        s2 = "否"

"""
对应控件:
l3 = Label(window,text="是否生成一整个exe文件?[建议选是]")
l3.pack()

radio2 = IntVar()
R1 = Radiobutton(window, text="是[建议]", variable=radio2, value=1, command=in2)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio2, value=2, command=in2)
R2.pack( anchor = W )
"""

这里的r2以及其他的r*都是最后用于cmd的命令的,而这里的r2以及其他的r*都是用于那个最后确认信息的弹窗的。

对于第二类:

def in1():
    a = int(radio1.get())
    global r1
    global ret
    global s1
    if a == 1:
        ret = simpledialog.askstring(title = '输入',prompt='请输入ico图标绝对路径或相对路径')
        r1 = " -i " + str(ret)
        s1 = "是。" + " ico路径:" + ret 
    else:
        r1 = ""
        s1 = "否"

"""
对应控件:
l2 = Label(window,text="是否添加ico图标")
l2.pack()

radio1 = IntVar()
R1 = Radiobutton(window, text="是", variable=radio1, value=1, command=in1)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio1, value=2, command=in1)
R2.pack( anchor = W )
"""

接下来,就该去做那个消息提示框了。

从上面的效果和代码中应该可以猜到,这个信息提示框应该是在seeall函数中,所以,我们现在就开始写seeall()函数。

def seeall():
    r4 = e1.get()
    nr =  "py文件路径:" + r4 +"\n" + "是否添加ico图标:" + s1 + "\n" + "是否生成一整个exe文件:" + s2 +"\n" + "是否允许显示控制台窗口:" + s3
    re = messagebox.askquestion(title = '确认框 by sarxc',message= nr)
    if re == "yes":
        st = ok()
        messagebox.showinfo(title = '完成',message= "完成")
    else:
        messagebox.showinfo(title = '取消',message= "已取消")

当您看到"\n"时可能会感到疑惑,别担心,其实这只是python中的换行代码。

而这个showinfo就是信息框。

现在,消息提示框做完了,您会发现,还有一个函数没有定义,就是ok(),这个函数是最终运行的函数,正如其名,运行完就ok了。

这时,便用到了那个迟迟未出场的os库了。

2.运行cmd的函数:

首先,肯定还是先导入库

import os

接下来,就是写ok()函数:

def ok():
    r4 = e1.get()
    con = "pyinstaller" + r2 + r3 + r1 + " " + r4
    os.system(con)

最后的os.system()便是调用cmd命令,而括号里面的变量即是将要在cmd中运行的命令。


三、封装

如果想让您刚才做的软件更易于使用,您可以用您刚才做的软件复制出一个副本来进行封装,这样也可以测试您写的程序。


四、全部代码

import os
from tkinter import *
from tkinter import simpledialog
from tkinter import messagebox

def in1():
    a = int(radio1.get())
    global r1
    global ret
    global s1
    if a == 1:
        ret = simpledialog.askstring(title = '输入',prompt='请输入ico图标绝对路径或相对路径')
        r1 = " -i " + str(ret)
        s1 = "是。" + " ico路径:" + ret 
    else:
        r1 = ""
        s1 = "否"

def in2():
    a = int(radio2.get())
    global r2
    global s2
    if a == 1:
        r2 = " -F"
        s2 = "是"
    else:
        r2 = ""
        s2 = "否"

def in3():
    a = int(radio3.get())
    global r3
    global s3
    if a == 2:
        r3 = " -w"
        s3 = "否"
    else:
        r3 = ""
        s3 = "是"

def ok():
    r4 = e1.get()
    con = "pyinstaller" + r2 + r3 + r1 + " " + r4
    os.system(con)

def seeall():
    r4 = e1.get()
    nr =  "py文件路径:" + r4 +"\n" + "是否添加ico图标:" + s1 + "\n" + "是否生成一整个exe文件:" + s2 +"\n" + "是否允许显示控制台窗口:" + s3
    re = messagebox.askquestion(title = '确认框 by sarxc',message= nr)
    if re == "yes":
        st = ok()
        messagebox.showinfo(title = '完成',message= "完成")
    else:
        messagebox.showinfo(title = '取消',message= "已取消")

window = Tk()
window.geometry('250x350')
window.title('py转exe by sraxc')
l1 = Label(window,text="py文件绝对路径或相对路径")
l1.pack()

e1 = Entry(window)
e1.pack()

l2 = Label(window,text="是否添加ico图标")
l2.pack()

radio1 = IntVar()
R1 = Radiobutton(window, text="是", variable=radio1, value=1, command=in1)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio1, value=2, command=in1)
R2.pack( anchor = W )

l3 = Label(window,text="是否生成一整个exe文件?[建议选是]")
l3.pack()

radio2 = IntVar()
R1 = Radiobutton(window, text="是[建议]", variable=radio2, value=1, command=in2)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio2, value=2, command=in2)
R2.pack( anchor = W )

l4 = Label(window,text="是否允许显示控制台窗口?")
l4.pack()

l5 = Label(window,text="(如您是直接在命令行中运行建议选是)")
l5.pack()

radio3 = IntVar()
R1 = Radiobutton(window, text="是", variable=radio3, value=1, command=in3)
R1.pack( anchor = W )
R2 = Radiobutton(window, text="否", variable=radio3, value=2, command=in3)
R2.pack( anchor = W )

button = Button(window,text ='开始',command = seeall)
button.pack()

window.mainloop()

五、结语

希望这篇文章对您有所帮助。

  • 2
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
打包Python GUI应用程序并将其转换为可执行文件,可以使用PyInstaller或cx_Freeze。 以下是使用PyInstaller打包Python GUI应用程序并将其转换为可执行文件的步骤: 1. 安装PyInstaller:在命令行中使用pip install pyinstaller安装PyInstaller。 2. 编写Python GUI应用程序并保存为.py文件。 3. 在命令行中输入以下命令:pyinstaller --onefile --windowed yourprogram.py。其中,yourprogram.py是你编写的Python GUI应用程序的文件名。--onefile选项将生成一个单个的可执行文件,--windowed选项将应用程序运行在窗口模式下,而不是控制台模式下。 4. PyInstaller将创建一个dist文件夹,其中包含生成的可执行文件。将生成的可执行文件复制到任何地方,并运行它以查看GUI应用程序是否正常工作。 以下是使用cx_Freeze打包Python GUI应用程序并将其转换为可执行文件的步骤: 1. 安装cx_Freeze:在命令行中使用pip install cx_Freeze安装cx_Freeze。 2. 编写Python GUI应用程序并保存为.py文件。 3. 创建一个setup.py文件,其中包含以下代码: ``` import sys from cx_Freeze import setup, Executable build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} base = None if sys.platform == "win32": base = "Win32GUI" setup(name="yourprogram", version="0.1", description="Description of your program", options={"build_exe": build_exe_options}, executables=[Executable("yourprogram.py", base=base)]) ``` 其中,yourprogram是你编写的Python GUI应用程序的文件名。 4. 在命令行中输入以下命令:python setup.py build。这将创建一个build文件夹,其中包含生成的可执行文件。 5. 将生成的可执行文件复制到任何地方,并运行它以查看GUI应用程序是否正常工作。 注意:在使用PyInstaller或cx_Freeze打包Python GUI应用程序时,可能需要将所需的库和文件包括在打包过程中。可以在打包命令中使用--add-data选项指定要包含的文件和文件夹。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值