python运行tkinter界面时多线程启动一个input代码后当无输入 时无法通过代码关闭窗口

环境:python3
本来是希望解决另外一个问题,但是出现了新的问题,下面的代码不需要别的依赖库,复制就可以运行。
当把第7行print(msg)注释掉的时候,运行程序后按界面上的那个按钮,窗口顺利中止,msg也能print出来。但是把注释去掉之后,再次点击按钮,程序就卡死了。这是怎么回事呢?改了一个print影响了程序流程吗,会导致卡死呢?请教一下,非常感谢。
上代码:

is_error = True

import tkinter
from threading import Thread

def f1(top, msg):
#print(msg)
top.destroy()

def f2(top):
if is_error:
s = input('\ninput:')
print('output:', s)
else:
s = 'No error'
s2 = tkinter.Label(top, text=s)
s2.pack()

top = tkinter.Tk()
b1 = tkinter.Button(top, text='Test', command=lambda:f1(top,123))
b1.pack()
t = Thread(target=f2, args=(top,))
t.start()
top.mainloop()
百度啊,把缩进全都搞没了。

重发一次:
is_error = True
import tkinter
from threading import Thread
def f1(top, msg):
~~~~#print(msg)
~~~~top.destroy()
def f2(top):
~~~~if is_error:
~~~~~~~~s = input('\ninput:')
~~~~~~~~print('output:', s)
~~~~else:
~~~~~~~~s = 'No error'
~~~~s2 = tkinter.Label(top, text=s)
~~~~s2.pack()
top = tkinter.Tk()
b1 = tkinter.Button(top, text='Test', command=lambda:f1(top,123))
b1.pack()
t = Thread(target=f2, args=(top,))
t.start()
top.mainloop()

第1个回答  2018-12-21
from tkinter import *root=Tk()def jinru(): root.destroy() global root1 root1=Tk() root1.mainloop()buff=Button(root,text="登录",command=jinru)buff.pack()root.mainloop()追问

你在干吗?

相似回答