我正在使用tkinter来获取用户的实时输入。根据是/否,系统将要求用户从日期选择器中选择日期。一旦选择了日期,程序会将该日期赋给全局变量todays_date、yesterdays_date。
这里的问题是它没有进一步移动到下一行代码"print('final status')“。你能让我知道我错过了什么吗?
代码如下:
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')发布于 2021-07-13 00:41:12
我想我找到了一个解决方案。.quit()不使用.withdraw(),只需使用.destroy()即可。
您已更正的代码:
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。
https://stackoverflow.com/questions/68308329
复制相似问题