tkinter

前言

Tkinter是python内置的GUI库,只要配置了python环境,无需再安装就可以直接使用,最终目的是要打包成一个可以在windows系统上运行的软件,即后缀为exe的可执行文件。


tkinter基础 

运行这一段代码看会发生什么

import tkinter as tk   #导入tkinter库,并起一个别名为tk
window=tk.Tk()         #新建一个窗口
window.geometry('800x600')#设置窗口大小,注意这里是小写的英文字母x
window.mainloop()      #相当于while循环,让窗口保持运行的状态

我们建立了一个窗口,定义了它的大小,并让它呈现在我们面前。


label(标签)控件

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代表竖直方向。


Entry(输入框)控件

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这个变量当中。这就可以对输入的数据进行一系列操作了。


Button(按钮)控件

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的函数,输出了一句话,当然是在终端输出,如何把它呈现在界面上呢?可以用下面的文本框控件。


Text(文本框)控件

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目录下,需要把程序依赖的文件放到和应用程序同级的目录下,生成的中间文件包括源程序可以直接删掉了。

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值