制作缘由
一方面,想写一个较简单、内含功能较多的tkinter窗口,以便将来给其他程序作模板用。另一方面,用命令行打包exe太麻烦了。
界面预览
若文件地址是手动输入,则点击‘确认’后点击‘打包’。
若文件地址是点击‘选择文件’选定的,则可以直接点击‘打包’。
代码演示
写完后只是粗略地测试了一下,可能会有一点bug。如果有bug及代码修改方式希望能告知一下,谢谢!!!!
另外,如果有人知道如何更快更好地进行控件排版的话,请再评论区告知,谢谢!!!!
from tkinter import Tk, Button, filedialog, Entry
import os
class Installer:
def __init__(self):
self.WIN = Tk()
self.WIN.title('installer') # 窗口名
self.WIN.geometry('400x104+568+380') # 我的电脑屏幕为1536*864
self.py_path = '' # Python文件地址
self.ico_path = '' # 图标文件地址
# 创建控件
self.py_btn = Button(self.WIN, text='选择py文件', width=10, command=self.event_py)
self.ico_btn = Button(self.WIN, text='选择ico文件', width=10, command=self.event_ico)
self.change_btn = Button(self.WIN, text='打包', width=15, command=self.event_change)
self.qr_btn = Button(self.WIN, text='确认', width=15, command=self.event_qr)
self.py_entry = Entry(self.WIN, show=None, width=40)
self.ico_entry = Entry(self.WIN, show=None, width=40)
# 部署控件
self.py_btn.place(x=305, y=5)
self.ico_btn.place(x=305, y=35)
self.change_btn.place(x=235, y=70)
self.qr_btn.place(x=40, y=70)
self.py_entry.place(x=10, y=10)
self.ico_entry.place(x=10, y=40)
# 进入窗口循环
self.WIN.mainloop()
def event_py(self): # 点击按钮‘选择py文件’事件
self.py_path = filedialog.askopenfilename(filetypes=[('Python File', '*.py')])
self.py_entry.select_clear()
self.py_entry.insert(0, self.py_path)
def event_ico(self): # 点击按钮‘选择ico文件’事件
self.ico_path = filedialog.askopenfilename(filetypes=[('Icon File', '*.ico')])
self.ico_entry.select_clear()
self.ico_entry.insert(0, self.ico_path)
def event_change(self): # 点击按钮‘打包’事件
if self.ico_path == '':
if not os.path.exists(self.py_path.rstrip('.py')):
os.mkdir(self.py_path.rstrip('.py'))
cmd1 = self.py_path[0] + ': & cd ' + self.py_path.rstrip('.py') + \
' & pyinstaller -D -w ' + self.py_path
os.system(cmd1)
else:
if not os.path.exists(self.py_path.rstrip('.py')):
os.mkdir(self.py_path.rstrip('.py'))
cmd1 = self.py_path[0] + ': & cd ' + self.py_path.rstrip('.py') + \
' & pyinstaller -D -w -i ' + self.ico_path + ' ' + self.py_path
os.system(cmd1)
def event_qr(self): # 点击按钮‘确认’事件
self.py_path = str(self.py_entry.get())
self.ico_path = str(self.ico_entry.get())
if __name__ == '__main__':
Install = Installer()