如何解决Tkinter输入和按钮组合功能在其他功能中不起作用
我创建了一个函数,该函数调用具有多个条目和一个按钮的GUI。 如果我按下按钮,则条目中的值将在函数中返回。
/tmp
如果我在同一脚本中使用以下代码运行它,它将起作用。
def date_time_gui ():
win = tk.Tk()
win.title('powered by Python') # win title
win.geometry('700x400') # size of win
# add label on the win
label = tk.Label(win,text='type the heaving datetime and out water datetime',font = ('Arial Bold',25)
)
label.place(relx = 0.5,rely = 0.05,anchor = 'n')
# label and entry for heaving datetime
heaving_label = tk.Label(win,text='type heaving datetime',15)
)
heaving_label.place(relx = 0.1,rely = 0.3,anchor = 'w')
h_year_label = tk.Label(win,text='YEAR (4 digits) :')
h_year_label.place(relx = 0.1,rely = 0.4,anchor = 'w')
h_year = tk.Entry(win,fg='black',width = 5)
h_year.place(relx = 0.3,anchor = 'w')
h_month_label = tk.Label(win,text='MONTH (2 digits) :')
h_month_label.place(relx = 0.1,rely = 0.5,anchor = 'w')
h_month = tk.Entry(win,width = 5)
h_month.place(relx = 0.3,anchor = 'w')
h_date_label = tk.Label(win,text='DATE (2 digits) :')
h_date_label.place(relx = 0.1,rely = 0.6,anchor = 'w')
h_date = tk.Entry(win,width = 5)
h_date.place(relx = 0.3,anchor = 'w')
h_hour_label = tk.Label(win,text='HOUR (24h,2 digits) :')
h_hour_label.place(relx = 0.1,rely = 0.7,anchor = 'w')
h_hour = tk.Entry(win,width = 5)
h_hour.place(relx = 0.3,anchor = 'w')
h_minute_label = tk.Label(win,text='MINUTE (2 digits) :')
h_minute_label.place(relx = 0.1,rely = 0.8,anchor = 'w')
h_minute = tk.Entry(win,width = 5)
h_minute.place(relx = 0.3,anchor = 'w')
# label and entry for out water datetime
outwater_label = tk.Label(win,text='type out water datetime',15)
)
outwater_label.place(relx = 0.5,anchor = 'w')
o_year_label = tk.Label(win,text='YEAR (4 digits) :')
o_year_label.place(relx = 0.5,anchor = 'w')
o_year = tk.Entry(win,width = 5)
o_year.place(relx = 0.7,anchor = 'w')
o_month_label = tk.Label(win,text='MONTH (2 digits) :')
o_month_label.place(relx = 0.5,anchor = 'w')
o_month = tk.Entry(win,width = 5)
o_month.place(relx = 0.7,anchor = 'w')
o_date_label = tk.Label(win,text='DATE (2 digits) :')
o_date_label.place(relx = 0.5,anchor = 'w')
o_date = tk.Entry(win,width = 5)
o_date.place(relx = 0.7,anchor = 'w')
o_hour_label = tk.Label(win,2 digits) :')
o_hour_label.place(relx = 0.5,anchor = 'w')
o_hour = tk.Entry(win,width = 5)
o_hour.place(relx = 0.7,anchor = 'w')
o_minute_label = tk.Label(win,text='MINUTE (2 digits) :')
o_minute_label.place(relx = 0.5,anchor = 'w')
o_minute = tk.Entry(win,width = 5)
o_minute.place(relx = 0.7,anchor = 'w')
def run_func ():
global heaving
global outwater
heaving = h_year.get()+'.'+h_month.get()+'.'+h_date.get()+' '+h_hour.get()+' '+h_minute.get()
outwater = o_year.get()+'.'+o_month.get()+'.'+o_date.get()+' '+o_hour.get()+' '+o_minute.get()
print('here')
win.destroy()
print('there')
return heaving,outwater
print('else')
button = ttk.Button(win,text = 'run',command = run_func)
button.place(relx = 0.8,rely = 0.9,anchor = 'w')
print('this')
win.mainloop()
print('where')
return heaving,outwater
它打印出h,o,它们是函数date_time_gui的返回值
但是,如果我将此功能应用于其他定义,例如
if __name__ == "__main__":
h,o = date_time_gui()
print(h,o)
它只是停止工作。
我想检查date_time_gui中的哪一行是问题所在,所以我打印了'there','where'等。
当我运行other_def时,它打印出来了 其他 这个 这里 在那里
然后没有打印出“哪里”
我真的不知道是什么问题,因为date_time_gui函数本身运行良好。 当我将其应用于其他功能时,它将不起作用。
- 也许,要运行other_def,我做了一个带有复选框的gui,以运行other_def。 因此,如果我检查gui上的other_def函数并单击运行按钮,则gui将被销毁,other_def将运行。弹出date_time_gui的新gui并点击运行按钮,然后销毁gui并停止工作。
解决方法
使用 tkinter 窗口
时- 调用 loop()方法将激活tkinter消息泵,并将停止线性python代码,直到关闭窗口
- 您可以通过手动关闭窗口或从代码中调用 quit()退出循环。
在您的情况下,调用win.mainloop()
会停止线性脚本。
您可以通过将win.quit()
添加到run_func
函数中来退出循环。
尝试以下代码:
def run_func ():
global heaving
global outwater
heaving = h_year.get()+'.'+h_month.get()+'.'+h_date.get()+' '+h_hour.get()+' '+h_minute.get()
outwater = o_year.get()+'.'+o_month.get()+'.'+o_date.get()+' '+o_hour.get()+' '+o_minute.get()
print('here')
win.destroy()
print('there')
win.quit() # exit gui loop
return heaving,outwater # not needed
print('else')
button = ttk.Button(win,text = 'run',command = run_func)
button.place(relx = 0.8,rely = 0.9,anchor = 'w')
print('this')
win.mainloop() # python code stops here until window closed
print('where')
heaving,outwater = 3,4 # for testing
return heaving,outwater
if __name__ == "__main__":
h,o = date_time_gui()
print(h,o)
输出
else
this
here
there
where
3 4
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。