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

环境:python3本来是希望解决另外一个问题,但是出现了新的问题,下面的代码不需要别的依赖库,复制就可以运行。当把第7行print(msg)注释掉的时候,运行程序后按界... 环境: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()
展开
 我来答
司马刀剑
高粉答主

2018-12-21 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7505万
展开全部
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()
追问
你在干吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式