Python Tkinter-仅在第二次执行后返回
我在Tkinkter中有一个非常简单的应用程序。我在Ipython笔记本上运行它 问题是,每当我运行应用程序并按下“获取”按钮一次时,都不会返回任何内容。我再次按下按钮,返回两个值。我按按钮3次或更多次,每次按按钮时返回1个值。问题在于第一次按下按钮。有什么事我不明白Python Tkinter-仅在第二次执行后返回,python,tkinter,ipython-notebook,Python,Tkinter,Ipython Notebook,我在Tkinkter中有一个非常简单的应用程序。我在Ipython笔记本上运行它 问题是,每当我运行应用程序并按下“获取”按钮一次时,都不会返回任何内容。我再次按下按钮,返回两个值。我按按钮3次或更多次,每次按按钮时返回1个值。问题在于第一次按下按钮。有什么事我不明白 from tkinter import * from tkinter import ttk, Tk class SampleApp(tk.Tk): def __init__(self): tk.Tk._
from tkinter import *
from tkinter import ttk, Tk
class SampleApp(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.entry = tk.Entry(self)
self.button = tk.Button(self, text="Get", command=self.on_button)
self.button.pack()
self.entry.pack()
def on_button(self):
value = float(self.entry.get())
print (value*2)
app = SampleApp()
app.mainloop()
输入=5
按下1个按钮后获得的输出(不需要)
没什么
按下两次按钮后(虽然我希望在此阶段出现两个值,但我不希望同时出现两个值)
十,
十,
按下3次按钮后(预计)
十,
十,
十,
按下4次按钮后(预计)
十,
十,
十,
10在搜索了一段时间的答案后,令人恼火的是,就在我发帖之后,答案又露了出来。找到了答案。虽然我不确定我是否理解,但第一次打印并不会触发标准输出的刷新。手动解决方法位于链接或下面
import sys
def on_button(self):
value = float(self.entry.get())
print (value*2)
sys.stdout.flush() #place this after the print statement
更正缩进和名称空间问题,以便实际运行,我看不到您所描述的不需要的行为。请尝试使用普通python编写代码-而不是
IPython Notebook
-并查看其工作原理。如果没有问题,那么问题是IPython笔记本
code对我来说适用于Python 3.5(在我将从tkinter导入*
更改为将tkinter作为tk导入
之后),我仍然看不到您描述的延迟。您确定了它为什么在您的设置中执行此操作吗?(另外,您还可以将flush=True
添加到print
调用中,以刷新输出,而无需弄乱sys
),这会更干净、更好,谢谢。这似乎是因为代码仍在运行。