首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter - mainloop()冻结

tkinter - mainloop()冻结
EN

Stack Overflow用户
提问于 2021-07-09 04:34:30
回答 1查看 41关注 0票数 0

我正在使用tkinter来获取用户的实时输入。根据是/否,系统将要求用户从日期选择器中选择日期。一旦选择了日期,程序会将该日期赋给全局变量todays_date、yesterdays_date。

这里的问题是它没有进一步移动到下一行代码"print('final status')“。你能让我知道我错过了什么吗?

代码如下:

代码语言:javascript
复制
import tkinter as tk
from tkcalendar import Calendar
from datetime import datetime, timedelta
def invoke_date(Var1,root):
    root.withdraw()
    root.quit()
    global todays_date, yesterdays_date
    if Var1.get() == 2:
        def cal_done():
            top.withdraw()
            root_date.quit()
        root_date = tk.Tk()
        root_date.withdraw()
        top = tk.Toplevel(root_date)    
        cal = Calendar(top, font="Arial 14", selectmode='day', cursor="hand1")
        cal.pack(fill="both", expand=True)
        tk.Button(top, text="OK", command=cal_done).pack()
        root_date.mainloop()
        todays_date = cal.selection_get()
        yesterdays_date = todays_date - timedelta(days = 1)
    else:        
        todays_date = datetime.now()
        yesterdays_date = datetime.now() - timedelta(days = 1)


root = tk.Tk()
root.title("Report Dialog Box")
tk.Label(root, text="Do you want to run the report for today's date?:",justify = tk.LEFT,padx = 20).pack()
Var1 = tk.IntVar()
tk.Radiobutton(root, text = "Yes", padx = 20,variable = Var1,value = 1).pack(anchor=tk.W)
tk.Radiobutton(root, text = "No", padx = 20,variable = Var1,value = 2).pack(anchor=tk.W)
tk.Button(root, text = "Submit", command = lambda: invoke_date(Var1,root)).pack()    
root.mainloop()

print('final status')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-13 00:41:12

我想我找到了一个解决方案。.quit()不使用.withdraw(),只需使用.destroy()即可。

您已更正的代码:

代码语言:javascript
复制
import tkinter as tk
from tkcalendar import Calendar
from datetime import datetime, timedelta

def invoke_date(Var1,root):
    root.destroy()
    global todays_date, yesterdays_date
    if Var1.get() == 2:
        def cal_done():
            root_date.destroy()
        root_date = tk.Tk() 
        cal = Calendar(root_date, font="Arial 14", selectmode='day', cursor="hand1")
        cal.pack(fill="both", expand=True)
        tk.Button(root_date, text="OK", command=cal_done).pack()
        root_date.mainloop()
        todays_date = cal.selection_get()
        yesterdays_date = todays_date - timedelta(days = 1)
    else:        
        todays_date = datetime.now()
        yesterdays_date = datetime.now() - timedelta(days = 1)


root = tk.Tk()
root.title("Report Dialog Box")
tk.Label(root, text="Do you want to run the report for today's date?:",justify = tk.LEFT,padx = 20).pack()
Var1 = tk.IntVar()
tk.Radiobutton(root, text = "Yes", padx = 20,variable = Var1,value = 1).pack(anchor=tk.W)
tk.Radiobutton(root, text = "No", padx = 20,variable = Var1,value = 2).pack(anchor=tk.W)
tk.Button(root, text = "Submit", command = lambda: invoke_date(Var1,root)).pack()    
root.mainloop()

print('final status')

我还删除了Toplevel,因为您可以只使用root_date

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68308329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档