首先请注意,我是在Enthought/Canopy中进行这些操作的。
我有这个基本的GUI,它有4个输入框,你在里面输入东西,然后你点击一个按钮,它打印你输入的东西。然而,它并没有按照我想要的方式运行。当你启动代码并输入值并按下按钮时,它不会做任何事情,然后你关闭gui窗口,它将打印你输入的值。
同样,当您输入值并点击一次按钮时,它不会做任何事情,但如果您再次点击按钮,它将打印值,但不像预期的那样。假设你输入了1,2,3,4,并按了两次按钮,你在屏幕上看到的是1,2,3,4,1,当你现在关闭窗口时,它会打印出剩下的内容。
如果你们能帮我解决这个问题,我会很感激的。提前谢谢你。下面是我的代码:更新:此问题不会发生在IDLE,但只有Canopy。
from Tkinter import *
class Application:
def printcmd(self):
print(self.entrybox.get())
def __init__(self, master):
self.entrybox = Entry(master)
self.button = Button(master, text="print", command = self.printcmd)
self.entrybox.grid()
self.button.grid()
root = Tk()
Application(root)
root.mainloop()
如果你在Canopy GUI中这样做,你应该确保Qt没有被设置为GUI后端。见https://support.enthought.com/hc/en-us/articles/204469880-Using-Tkinter-Turtle-or-Pyglet-in-Canopy-s-IPython-panel
对于打印延迟:Python缓冲其输出。如果希望确保立即打印某些输出,可以在print语句后面加上sys.stdout.flush()
来刷新打印输出缓冲区。(当然你必须先import sys
。)
这在任何Python程序中都可能是一个问题。它在Canopy中比在IDLE中出现得更频繁,因为Canopy使用了IPython的QtConsole,它将执行内核从前端终端式面板分离为两个独立的操作系统进程。