Tkinter是python内置的GUI库,只要配置了python环境,无需再安装就可以直接使用,最终目的是要打包成一个可以在windows系统上运行的软件,即后缀为exe的可执行文件。
运行这一段代码看会发生什么
import tkinter as tk #导入tkinter库,并起一个别名为tk
window=tk.Tk() #新建一个窗口
window.geometry('800x600')#设置窗口大小,注意这里是小写的英文字母x
window.mainloop() #相当于while循环,让窗口保持运行的状态
我们建立了一个窗口,定义了它的大小,并让它呈现在我们面前。
import tkinter as tk #导入tkinter库,并起一个别名为tk
window=tk.Tk() #新建一个窗口
window.geometry('800x600')#设置窗口大小,注意这里是小写的英文字母x
Label_1 = tk.Label(window, text='用户名', bg='orange', width=5, height=1)
Label_1.place(x=460, y=320, anchor='nw')
window.mainloop() #相当于while循环,让窗口保持运行的状态
在代码中加入了以下两句,建立一个标签,可以用来存放文字,它甚至还可以加载背景图片,先不提,会在后面的代码中呈现
Label_1 = tk.Label(window, text='用户名', bg='orange', width=5, height=1)
Label_1.place(x=460, y=320, anchor='nw')
我们定义的窗口叫window,而这个Label是长在window上面的,然后text=' '可以定义它显示的文字,bg是background的缩写,定义背景颜色,width定义宽度,height定义高度。
当然,定义完之后要放到指定的位置,用place方法可以精确得放置它的位置,nw是northwest的缩写,代表以窗口的西北角为基准放置,x代表水平方向,y代表竖直方向。
import tkinter as tk #导入tkinter库,并起一个别名为tk
window=tk.Tk() #新建一个窗口
window.geometry('800x600')#设置窗口大小,注意这里是小写的英文字母x
Label_1 = tk.Label(window, text='用户名', bg='orange', width=5, height=1)
Label_1.place(x=460, y=320, anchor='nw')
var_usr_name = tk.StringVar()
Input_text_1 = tk.Entry(window, width='18',textvariable=var_usr_name)
Input_text_1.place(x=500, y=320)
window.mainloop() #相当于while循环,让窗口保持运行的状态
和之前的label看起来用法差不多,但要注意,text变为了textvariable,就是说这是一个变量,变量的值是通过tk.StringVar()函数获取并被保存在var_usr_name这个变量当中。这就可以对输入的数据进行一系列操作了。
import tkinter as tk #导入tkinter库,并起一个别名为tk
window=tk.Tk() #新建一个窗口
window.geometry('800x600')#设置窗口大小,注意这里是小写的英文字母x
def login():
print('我是一个名叫login的函数')
Radio_button_1 = tk.Button(window, text='登录', bg='orange', command=login, width=26)
Radio_button_1.place(x=460, y=380)
window.mainloop() #相当于while循环,让窗口保持运行的状态
按钮用于触发某一事件,而事件就是我们定义的函数,用法为command='某一函数',我们定义了一个叫login的函数,输出了一句话,当然是在终端输出,如何把它呈现在界面上呢?可以用下面的文本框控件。
import tkinter as tk #导入tkinter库,并起一个别名为tk
window=tk.Tk() #新建一个窗口
window.geometry('800x600')#设置窗口大小,注意这里是小写的英文字母x
def login():
a='我是一个名叫login的函数'
text_variable.insert('end',a)
Radio_button_1 = tk.Button(window, text='登录', bg='orange', command=login, width=26)
Radio_button_1.place(x=460, y=380)
text_variable = tk.Text(window, bg='red', width=30, height=50)
text_variable.place(x=10, y=320)
window.mainloop() #相当于while循环,让窗口保持运行的状态
和之前输出到终端相比,它的特别之处就在于,用text_variable.insert('end',a)来把a这个变量插入到文本框里,插入位置是文本框的末尾。讲到这里,实际上我们已经学会了数据交互方法,即在界面上接收用户输入的数据,输出经过处理的数据。了解了这一点,之后的学习就很简单了,这里强烈推荐一位大佬的教程,这是链接,看你需要的部分,祝你好运。
详见注释,程序所需要的附件见我的资源
import tkinter as tk
import tkinter.messagebox
import pickle
from tkinter import ttk
class LOGIN():
islogin = 0 # 初始状态没有登录,标志变量设为0
def login(self):
user_name = self.var_usr_name.get() #获取输入的帐号密码
pass_word = self.var_usr_pwd.get()
try:
with open('user.pickle', 'rb') as user_file: #打开记录帐号密码的文件
user = pickle.load(user_file)
except FileNotFoundError:
with open('user.pickle', 'wb') as user_file: #若没有文件则创建
user = {'admin': '123456','user':'123456'}
pickle.dump(user, user_file)
if user_name in user and pass_word == user[user_name]:
if user_name=='admin':
self.islogin=1
elif user_name=='user':
self.islogin=-1 #帐号密码正确则改变标志
self.window.destroy()
else:
tk.messagebox.showinfo(title='error',message='用户名或密码错误!')
def __init__(self,master):
self.window=master
self.window.title('高校工资管理系统')
self.window.geometry('1220x768')
# 增加背景图片
self.photo = tk.PhotoImage(file="login.png")
self.theLabel = tk.Label(self.window,
font=("黑体", 15),
justify=tk.LEFT, # 对齐方式
image=self.photo, # 加入图片
compound=tk.CENTER, # 设置为背景图片
)
self.theLabel.pack()
# 设置标签和下拉框
self.var_usr_name = tk.StringVar()
Label_1 = tk.Label(self.window, text='用户名', bg='orange', width=5, height=1)
Label_1.place(x=460, y=320, anchor='nw')
Input_text_1 = ttk.Combobox(self.window, width='18',textvariable=self.var_usr_name)
Input_text_1['value']=('admin','user')
Input_text_1.place(x=500, y=320)
# 设置标签和输入框entry
self.var_usr_pwd = tk.StringVar()
Label_2 = tk.Label(self.window, text='密码', bg='orange', width=5, height=1)
Label_2.place(x=460, y=350, anchor='nw')
Input_text_2 = tk.Entry(self.window, width='21',textvariable=self.var_usr_pwd, show='*')
Input_text_2.place(x=500, y=350)
Label_3 = tk.Label(self.window, text='提示:密码 123456',justify=tk.LEFT,bg='orange', width=26, height=1)
Label_3.place(x=460, y=420, anchor='nw')
# 定义选项按钮
Radio_button_1 = tk.Button(self.window, text='登录', bg='orange', command=self.login, width=26)
Radio_button_1.place(x=460, y=380)
class SYSTEM():
def __init__(self,master):
self.window=master
self.window.title('高校工资管理系统')
self.window.geometry('840x600')
# 增加背景图片
self.photo = tk.PhotoImage(file="bg.png")
self.theLabel = tk.Label(self.window,
text="第三组",
font=("黑体", 15),
justify=tk.LEFT, # 对齐方式
image=self.photo, # 加入图片
compound=tk.CENTER, # 设置为背景图片
)
self.theLabel.pack()
# 定义显示文本框,用于反馈用户操作结果,添加滚动条
self.text_variable = tk.Text(self.window, bg='red', width=30, height=50)
self.text_variable.place(x=10, y=320)
# 设置标签和输入框entry
label_1 = tk.Label(self.window, text='工号', bg='pink', width=8, height=1)
label_1.place(x=10, y=10, anchor='nw')
self.input_text_1 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_1.place(x=75, y=10)
label_2 = tk.Label(self.window, text='姓名', bg='pink', width=8, height=1)
label_2.place(x=10, y=35, anchor='nw')
self.input_text_2 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_2.place(x=75, y=35)
label_3 = tk.Label(self.window, text='学院', bg='pink', width=8, height=1)
label_3.place(x=10, y=60, anchor='nw')
self.input_text_3 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_3.place(x=75, y=60)
label_4 = tk.Label(self.window, text='基本工资', bg='pink', width=8, height=1)
label_4.place(x=10, y=85, anchor='nw')
self.input_text_4 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_4.place(x=75, y=85)
label_5 = tk.Label(self.window, text='课时总数', bg='pink', width=8, height=1)
label_5.place(x=10, y=110, anchor='nw')
self.input_text_5 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_5.place(x=75, y=110)
label_6 = tk.Label(self.window, text='单位课时费', bg='pink', width=8, height=1)
label_6.place(x=10, y=135, anchor='nw')
self.input_text_6 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_6.place(x=75, y=135)
# 定义选项按钮
radio_button_1 = tk.Button(self.window, text='查找职工信息(按工号)', bg='orange', command=self.search_option, width=29)
radio_button_1.place(x=10, y=160)
radio_button_2 = tk.Button(self.window, text='删除职工信息', bg='orange', command=self.delete_option, width=29)
radio_button_2.place(x=10, y=280)
radio_button_3 = tk.Button(self.window, text='增加职工信息', bg='orange', command=self.add_option, width=29)
radio_button_3.place(x=10, y=220)
radio_button_4 = tk.Button(self.window, text='修改职工信息', bg='orange', command=self.alter_option, width=29)
radio_button_4.place(x=10, y=250)
radio_button_5 = tk.Button(self.window, text='查找职工信息(按学院)', bg='orange', command=self.search, width=29)
radio_button_5.place(x=10, y=190)
# 读取并展示文件
self.list_member = self.ReadData()
self.show_list()
def show_list(self):
#定义表格
form=ttk.Treeview(self.window,show='headings')
form.place(x=222, y=10, width=600, height=600)
#滚动条
bar=tk.Scrollbar(form)
bar.pack(side=tk.RIGHT,fill=tk.Y)
bar.config(command=form.yview)
#定义列
form['columns']=['工号','姓名','学院','基本工资','课时总数','单位时间课时费','总工资']
#定义列宽
form.column('工号',width=60,anchor='center')
form.column('姓名', width=60,anchor='center')
form.column('学院', width=60,anchor='center')
form.column('基本工资', width=60,anchor='center')
form.column('课时总数', width=60,anchor='center')
form.column('单位时间课时费', width=75,anchor='center')
form.column('总工资', width=75,anchor='center')
#添加列名
form.heading('工号',text='工号')
form.heading('姓名', text='姓名')
form.heading('学院', text='学院')
form.heading('基本工资', text='基本工资')
form.heading('课时总数', text='课时总数')
form.heading('单位时间课时费', text='单位时间课时费')
form.heading('总工资', text='总工资')
#添加数据
for i in range(len(self.list_member)):
money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
form.insert('','end',i,values=(self.list_member[i][0],
self.list_member[i][1],
self.list_member[i][2],
self.list_member[i][3],
self.list_member[i][4],
self.list_member[i][5],
money))
# 定义读取信息
def ReadData(self):
with open('data.dat', 'rb') as readfile:
showfile = pickle.load(readfile)
return showfile
# 保存信息
def save(self,list):
writefile = open('data.dat', 'wb')
pickle.dump(list, writefile)
writefile.close()
# 可复用函数,接收从entry中接收的值,按学号检索列表
def IsFind(self,number):
for i in range(len(self.list_member)):
if self.list_member[i][0] == number:
return i
return -1
# 定义查找函数(按学号)
def search_option(self):
self.text_variable.delete('1.0', 'end')#清空显示文本框
var = self.input_text_1.get() # 接收从输入框中输入的值
i = self.IsFind(var) # 把接收到的值传给IsFind函数,按工号检索列表
if i == -1:
tk.messagebox.showinfo(title='提示', message='您输入的工号不存在')
elif i != -1:
a = '\n您查找的信息为:\n'
self.text_variable.insert('end', a)
self.text_variable.insert('end', '工号: '+self.list_member[i][0]+'\n')
self.text_variable.insert('end', '姓名: '+self.list_member[i][1]+'\n')
self.text_variable.insert('end', '学院: '+self.list_member[i][2]+'\n')
self.text_variable.insert('end', '基本工资: '+self.list_member[i][3]+'\n')
self.text_variable.insert('end', '课时总数: '+self.list_member[i][4]+'\n')
self.text_variable.insert('end', '单位时间课时费:'+self.list_member[i][5]+'\n')
self.text_variable.insert('end', '总工资: ')
self.money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
self.text_variable.insert('end', self.money) # 把检索到的信息插入到定义的文本框中
# 定义查找函数(学院)
def search(self):
self.text_variable.delete('1.0', 'end')
var = self.input_text_3.get()
flag=0
for i in range(len(self.list_member)):
if self.list_member[i][2] == var:
a = '\n您查找的信息为:\n'
self.text_variable.insert('end', a)
self.text_variable.insert('end', '工号: '+self.list_member[i][0]+'\n')
self.text_variable.insert('end', '姓名: '+self.list_member[i][1]+'\n')
self.text_variable.insert('end', '学院: '+self.list_member[i][2]+'\n')
self.text_variable.insert('end', '基本工资: '+self.list_member[i][3]+'\n')
self.text_variable.insert('end', '课时总数: '+self.list_member[i][4]+'\n')
self.text_variable.insert('end', '单位时间课时费:'+self.list_member[i][5]+'\n')
self.money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
self.text_variable.insert('end', '总工资: ')
self.money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
self.text_variable.insert('end', self.money) # 把检索到的信息插入到定义的文本框中
flag=1
if flag==0:
return tk.messagebox.showinfo(title='提示', message='不存在')
# 删除操作,
def delete_option(self):
self.text_variable.delete('1.0', 'end')
var = self.input_text_1.get() # 接收从输入框中输入的值
i = self.IsFind(var) # 把接收到的值传给IsFind函数,按工号检索列表
if i == -1:
tk.messagebox.showinfo(title='提示', message='您输入的工号不存在')
else:
var_1 = tk.messagebox.askquestion(title='提示', message='删了就没了额,您确定要删除吗?')
# tk.messagebox.askquestion函数返回值是'yes'或者'no'的字符串,返回yes执行操作,其余情况不做更改
if var_1 == 'yes':
del self.list_member[i]
self.save(self.list_member)
self.show_list()
# 添加操作
def add_option(self):
self.text_variable.delete('1.0', 'end')
var_1 = self.input_text_1.get() # 接收输入的工号值
var_2 = self.input_text_2.get() # 接收输入的姓名值
var_3 = self.input_text_3.get() # 接收输入的学院值
var_4 = self.input_text_4.get() # 接收输入的基本工资值
var_5 = self.input_text_5.get() # 接收输入的课时总数值
var_6 = self.input_text_6.get() # 接收输入的单位课时费值
i = self.IsFind(var_1)
if i != -1:
tk.messagebox.showinfo(title='提示', message='您输入的工号已存在')
else:
VAR = tk.messagebox.askquestion(title='提示', message='您确认添加吗?')
# tk.messagebox.askquestion函数返回值是'yes'或者'no'的字符串,如果返回yes,并且其他输入框不为空,执行操作
if VAR == 'yes' and var_2 != '' and var_3 != '' and var_4 != '' and var_5 != '' and var_6 != '':
new_list = [var_1, var_2, var_3, var_4, var_5, var_6] # 把接收到的信息整合成一个列表,添加到二维列表中
self.list_member.append(new_list)
else:
tk.messagebox.showinfo(title='提示', message='输入的信息不能为空')
self.xuanze(self.list_member)
self.save(self.list_member)
self.show_list() # 更新列表信息
# 修改操作
def alter_option(self):
self.text_variable.delete('1.0', 'end')
var_1 = self.input_text_1.get() # 接收输入的工号值
var_2 = self.input_text_2.get() # 接收输入的姓名值
var_3 = self.input_text_3.get() # 接收输入的学院值
var_4 = self.input_text_4.get() # 接收输入基本工资的值
var_5 = self.input_text_5.get() # 接收输入的课时总数值
var_6 = self.input_text_6.get() # 接收输入的单位课时费值
i = self.IsFind(var_1)
if i == -1:
tk.messagebox.showinfo(title='提示', message='您输入的工号不存在')
else:
if var_2 != '': # 输入框不为空表示有要修改的内容
VAR = tk.messagebox.askquestion(title='提示', message='您确定要修改吗?')
if VAR == 'yes':
self.list_member[i][1] = var_2
if var_3 != '':
VAR_1 = tk.messagebox.askquestion(title='提示', message='您确定要修改吗?')
if VAR_1 == 'yes':
self.list_member[i][2] = var_3
if var_4 != '':
VAR_2 = tk.messagebox.askquestion(title='提示', message='您确定要修改吗?')
if VAR_2 == 'yes':
self.list_member[i][3] = var_4
if var_5 != '':
VAR_3 = tk.messagebox.askquestion(title='提示', message='您确定要修改吗?')
if VAR_3 == 'yes':
self.list_member[i][4] = var_5
if var_6 != '':
VAR_4 = tk.messagebox.askquestion(title='提示', message='您确定要修改吗?')
if VAR_4 == 'yes':
self.list_member[i][5] = var_6
self.save(self.list_member)
self.show_list() # 更新列表信息
# 简单选择排序
def xuanze(self,a):
for i in range(len(a) - 1): # 最后一个不用比较
min = i # 默认第i个元素最小
for j in range(i + 1, len(a)): # 用第i+1个和后面余下的数和此元素比较
if int(a[j][0]) < int(a[min][0]):
min = j
if min != i: # 如果最小数所在的下标位置不在下标位置,交换
temp = a[min]
a[min] = a[i]
a[i] = temp
return a
class USER_SYSTEM():
def __init__(self,master):
self.window=master
self.window.title('高校工资管理系统')
self.window.geometry('840x600')
# 增加背景图片
self.photo = tk.PhotoImage(file="bg.png")
self.theLabel = tk.Label(self.window,
text="第三组",
font=("黑体", 15),
justify=tk.LEFT, # 对齐方式
image=self.photo, # 加入图片
compound=tk.CENTER, # 设置为背景图片
)
self.theLabel.pack()
# 定义显示文本框,用于反馈用户操作结果,添加滚动条
self.text_variable = tk.Text(self.window, bg='red', width=30, height=50)
self.text_variable.place(x=10, y=120)
# 设置标签和输入框entry
label_1 = tk.Label(self.window, text='工号', bg='pink', width=8, height=1)
label_1.place(x=10, y=10, anchor='nw')
self.input_text_1 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_1.place(x=75, y=10)
label_3 = tk.Label(self.window, text='学院', bg='pink', width=8, height=1)
label_3.place(x=10, y=35, anchor='nw')
self.input_text_3 = tk.Entry(self.window, bg='LavenderBlush')
self.input_text_3.place(x=75, y=35)
# 定义选项按钮
radio_button_1 = tk.Button(self.window, text='查找职工信息(按工号)', bg='orange', command=self.search_option, width=29)
radio_button_1.place(x=10, y=60)
radio_button_5 = tk.Button(self.window, text='查找职工信息(按学院)', bg='orange', command=self.search, width=29)
radio_button_5.place(x=10, y=90)
# 读取并展示文件
self.list_member = self.ReadData()
self.show_list()
def show_list(self):
#定义表格
form=ttk.Treeview(self.window,show='headings')
form.place(x=222, y=10, width=600, height=650)
#滚动条
bar=tk.Scrollbar(form)
bar.pack(side=tk.RIGHT,fill=tk.Y)
bar.config(command=form.yview)
#定义列
form['columns']=['工号','姓名','学院','基本工资','课时总数','单位时间课时费','总工资']
#定义列宽
form.column('工号',width=60,anchor='center')
form.column('姓名', width=60,anchor='center')
form.column('学院', width=60,anchor='center')
form.column('基本工资', width=60,anchor='center')
form.column('课时总数', width=60,anchor='center')
form.column('单位时间课时费', width=75,anchor='center')
form.column('总工资', width=75,anchor='center')
#添加列名
form.heading('工号',text='工号')
form.heading('姓名', text='姓名')
form.heading('学院', text='学院')
form.heading('基本工资', text='基本工资')
form.heading('课时总数', text='课时总数')
form.heading('单位时间课时费', text='单位时间课时费')
form.heading('总工资', text='总工资')
#添加数据
for i in range(len(self.list_member)):
money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
form.insert('','end',i,values=(self.list_member[i][0],
self.list_member[i][1],
self.list_member[i][2],
self.list_member[i][3],
self.list_member[i][4],
self.list_member[i][5],
money))
# 定义读取信息
def ReadData(self):
with open('data.dat', 'rb') as readfile:
showfile = pickle.load(readfile)
return showfile
# 可复用函数,接收从entry中接收的值,按工号检索列表
def IsFind(self,number):
for i in range(len(self.list_member)):
if self.list_member[i][0] == number:
return i
return -1
# 定义查找函数(按学号)
def search_option(self):
self.text_variable.delete('1.0', 'end')#清空显示文本框
var = self.input_text_1.get() # 接收从输入框中输入的值
i = self.IsFind(var) # 把接收到的值传给IsFind函数,按工号检索列表
if i == -1:
tk.messagebox.showinfo(title='提示', message='您输入的工号不存在')
elif i != -1:
a = '\n您查找的信息为:\n'
self.text_variable.insert('end', a)
self.text_variable.insert('end', '工号: '+self.list_member[i][0]+'\n')
self.text_variable.insert('end', '姓名: '+self.list_member[i][1]+'\n')
self.text_variable.insert('end', '学院: '+self.list_member[i][2]+'\n')
self.text_variable.insert('end', '基本工资: '+self.list_member[i][3]+'\n')
self.text_variable.insert('end', '课时总数: '+self.list_member[i][4]+'\n')
self.text_variable.insert('end', '单位时间课时费:'+self.list_member[i][5]+'\n')
self.text_variable.insert('end', '总工资: ')
self.money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
self.text_variable.insert('end', self.money) # 把检索到的信息插入到定义的文本框中
# 定义查找函数(学院)
def search(self):
self.text_variable.delete('1.0', 'end')
var = self.input_text_3.get()
flag=0
for i in range(len(self.list_member)):
if self.list_member[i][2] == var:
a = '\n您查找的信息为:\n'
self.text_variable.insert('end', a)
self.text_variable.insert('end', '工号: '+self.list_member[i][0]+'\n')
self.text_variable.insert('end', '姓名: '+self.list_member[i][1]+'\n')
self.text_variable.insert('end', '学院: '+self.list_member[i][2]+'\n')
self.text_variable.insert('end', '基本工资: '+self.list_member[i][3]+'\n')
self.text_variable.insert('end', '课时总数: '+self.list_member[i][4]+'\n')
self.text_variable.insert('end', '单位时间课时费:'+self.list_member[i][5]+'\n')
self.money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
self.text_variable.insert('end', '总工资: ')
self.money = int(self.list_member[i][3]) + int(self.list_member[i][4]) * int(self.list_member[i][5])
self.text_variable.insert('end', self.money) # 把检索到的信息插入到定义的文本框中
flag=1
if flag==0:
return tk.messagebox.showinfo(title='提示', message='不存在')
# 简单选择排序
def xuanze(self,a):
for i in range(len(a) - 1): # 最后一个不用比较
min = i # 默认第i个元素最小
for j in range(i + 1, len(a)): # 用第i+1个和后面余下的数和此元素比较
if int(a[j][0]) < int(a[min][0]):
min = j
if min != i: # 如果最小数所在的下标位置不在下标位置,交换
temp = a[min]
a[min] = a[i]
a[i] = temp
return a
if __name__ == '__main__':
def show_admin(): #管理员系统
admin_window = tk.Tk()
SYSTEM(admin_window)
admin_window.mainloop()
def show_user(): #用户系统
user_window = tk.Tk()
USER_SYSTEM(user_window)
user_window.mainloop()
def Login():
login_window=tk.Tk()
a=LOGIN(login_window) #进入登陆界面
login_window.mainloop()
if a.islogin == 1: # 如果admin登录成功,展示管理员系统
show_admin()
elif a.islogin==-1: # 如果user登录成功,展示用户系统
show_user()
Login()
打包程序需要用到pyinstaller,只需一条命令~,需要注意的是,打包的时候需要将程序所依赖的文件放到和它同级的目录下,包括一些图片、数据、图标、如果你使用了需要另外下载的第三方库,还需要把这个库放进来一起打包。另外,在Linux系统中打包的文件不可以在windows系统下运行,在64位系统中打包的文件不可以在32位系统中运行。
以上是我的文件,包括两张背景图片png,一个图标文件start.ico,两个存放数据的文件和python程序,打开cmd,进入你的文件夹,输入
pyinstaller -F -w -i start.ico GROUP3.py
-F 表示生成单个可执行文件
-w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
-i 表示可执行文件的图标
打包好的应用程序在dist目录下,需要把程序依赖的文件放到和应用程序同级的目录下,生成的中间文件包括源程序可以直接删掉了。