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

目录

效果展示

一、前言

二、正文

(一)tkinter部分

1、导入tkinter

2、新建窗口

3、tkinter部分全部代码

(二)后端部分

1、变量

2、函数

三、封装

四、全部代码

五、结语


效果展示

py打包exe,用python做一个图形化界面_第1张图片py打包exe,用python做一个图形化界面_第2张图片

 

py打包exe,用python做一个图形化界面_第3张图片

一、前言

如果您只想使用此功能,可以直接前往下载原文件,并且无需安装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是显示的文字,效果如下:

py打包exe,用python做一个图形化界面_第4张图片

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

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()

五、结语

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

你可能感兴趣的:(python,python,开发语言)