slhjynvl 2022-06-13 20:57 采纳率: 73.3%
浏览 252
已结题

运行完Tkinter部分代码后,如何让Tkinter窗口自动关闭?

问题遇到的现象和发生背景

运行完Tkinter部分代码后,如何让Tkinter窗口自动关闭?

问题相关代码,请勿粘贴截图
import tkinter
import os.path
filename='student.txt'
def main():
    while True:
       muna()
       choice=eval(input('请选择:'))
       if choice in [0,1,2,3,4,5,6,7]:
            if choice==0:
                choices=input('您确定要退出系统吗?y/n')
                if choices=='y':
                    print('感谢你的使用!')
                    break
                else:
                    continue
            elif choice==1:
                insert()
            elif choice==2:
                search()
            elif choice==3:
                delete()
            elif  choice==4:
                change()
            elif choice==5:
                sort()
            elif choice==6:
                total()
            elif choice==7:
                show()

def muna():
    print('=================学生信息管理系统====================')
    print('=================功能菜单================================')
    print('\t\t\t\t\t\t1.录入学生信息')
    print('\t\t\t\t\t\t2.查找学生信息')
    print('\t\t\t\t\t\t3.删除学生信息')
    print('\t\t\t\t\t\t4.修改学生信息')
    print('\t\t\t\t\t\t5.排序')
    print('\t\t\t\t\t\t6.统计学生总人数')
    print('\t\t\t\t\t\t7.显示所有学生人数')
    print('\t\t\t\t\t\t0.退出系统')
def insert():
    student_list=[]
    while True:
        try:
            id=int(input('请输入id:'))
            namelist=input('请输入学生姓名')
            englist=int(input('请输入英语成绩:'))
            pythonlist=int(input('请输入python成绩:'))
            javalist=int(input('请输入java成绩'))
        except:
            print('输入数据无效!')
            continue
        student={'id':id,'英语':englist,'姓名':namelist,'python':pythonlist,'java':javalist}
        student_list.append(student)
        answer=input('是否继续添加?y/n')
        if answer=='y':
            continue
        else:
            break
    save(student_list)
    print('信息录入完毕!!!')
def save(lst):
    try:
        stu_txt=open(filename,'a',encoding='utf-8')
    except:
        stu_txt=open(filename,'w',encoding='utf-8')
    for item in lst:
        stu_txt.write(str(item)+'\n')
    stu_txt.close()
def search():
    student_lst=[]
    while True:
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8') as rflie:
                student_old=rflie.readlines()
                id=''
                name=''
                mode=input('请选择查找的方式1.按id查询,2.按姓名查询')
                if mode=='1':
                    id=int(input('请输入学生id:'))
                elif mode=='2':
                    name=input('请输入学生姓名:')
                else:
                    print('输入数据无效。')
                    search()
                for item in student_old:
                    d=dict(eval(item))
                    if id!='':
                        if d['id']==id:
                            student_lst.append(d)
                    elif name!='':
                        if d['name']==name:
                            student_lst.append(d)
                    else:
                        print('没有找到学生信息')
            show_student(student_lst)
            student_lst.clear()
            answer=input('是否继续查询?y/n')
            if answer=='y':
                continue
            else:
                break
        else:
            print('无学生数据!')
            return
def show_student(lst):
    if len(lst)==0:
        print('没有查询到学生信息,无数据显示。')
        return
    format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    print(format_title.format('id','姓名','英语成绩','python成绩','java成绩','总成绩'))
    format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    for item in lst:
        print(format_data.format(item.get('id'),
                                 item.get('姓名'),
                                 item.get('英语'),
                                 item.get('python'),
                                 item.get('java'),
                                 int(item.get('英语'))+int(item.get('python'))+int(item.get('java'))
                                 ))
def delete():
    while True:
        student_id=int(input('请输入你要删除的学生id:'))
        if student_id!='':
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8')as rfile:
                    student_old=rfile.readlines()
            else:

                student_old=[]
            flag=False
            if student_old:
                with open(filename,'w',encoding='utf-8') as wfile:
                    d={}
                    for item in student_old:
                        d=eval(item)
                        if d['id'] != student_id:
                            wfile.write(str(d)+'\n')
                        else:
                            flag=True
                    if flag:
                        print(f'id为{student_id}的学生已被删除!')
                    else:
                        print(f'没有找到id为{student_id}的学生!')
            else:
                print('无学生信息。')
                break
            show()
            answer=input('是否继续删除?y/n')
            if answer=='y':
                continue
            else:
                break
def change():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            studeny_old=rfile.readlines()
    else:
        return
    student_id=int(input('请输入要修改的学生id:'))
    with open(filename,'w',encoding='utf-8') as wfile:
        for item in studeny_old:
            d=dict(eval(item))
            if student_id==d['id']:
                print('找到该学生信息,可以进行修改!!!')
                while True:
                    try:
                        d['姓名']=input('请输入名字:')
                        d['英语']=input('请输入英语成绩:')
                        d['python']=input('请输入python成绩:')
                        d['java']=input('请输入java成绩:')
                    except:
                        print('输入数据无效!!')
                    else:
                        break
                wfile.write(str(d)+'\n')
                print('修改成功!')
            else:
                wfile.write(str(d)+'\n')
                break
        answer=input('是否继续修改其他学生信息?y/n')
        if answer=='y':
            change()
def sort():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_data=rfile.readlines()
            stuent_new=[]
            for item in student_data:
                d=dict(eval(item))
                stuent_new.append(d)
    else:
        return
    mode_1=int(input('请选择排序方式0.升序1.降序'))
    if mode_1==0:
        m_bool=False
    elif mode_1==1:
        m_bool=True
    else:
        print('您的输入有误!!')
        sort()
    mode_2=int(input('请输入排序方式:1.按英语成绩排序,2.按python成绩排序,3.按Java成绩排序,4.按总成绩排序'))
    if mode_2==1:
        stuent_new.sort(key=lambda x:int(x['英语']),reverse=m_bool)
    elif mode_2==2:
        stuent_new.sort(key=lambda x: int(x['python']), reverse=m_bool)
    elif mode_2==3:
        stuent_new.sort(key=lambda x: int(x['java']), reverse=m_bool)
    elif mode_2==4:
        stuent_new.sort(key=lambda x: int(x['英语'])+int(x['python'])+int(x['java']), reverse=m_bool)
    else:
        print('输入有误!')
        sort()
    show_student(stuent_new)
def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_list=rfile.readlines()
            if student_list:
                print(f'一共有{len(student_list)}名学生.')
            else:
                print('还未录入学生信息!!')
    else:
        print('暂未保存学生信息!')
def show():
    studentdata=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_data=rfile.readlines()
            for item in student_data:
                studentdata.append(eval(item))
            if studentdata:
                show_student(studentdata)
            else:
                print('无学生信息!')
    else:
        print('暂未保存数据信息!')
root=tkinter.Tk()
buttonImport=tkinter.Button(root,text='进入学生管理系统',command=main)
buttonImport.place(x=20,y=20,height=30,width=100)
root.mainloop()

运行结果及报错内容

img

我的解答思路和尝试过的方法

点击按钮后,Tkinter窗口仍未关闭

我想要达到的结果

如何在点击按钮后自动关闭Tkinter窗口?

  • 写回答

1条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-06-13 22:06
    关注

    在main()函数里加这一句就可以了

    def main():
        root.destroy()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月13日

悬赏问题

  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口