Python 特金特';Tk().after()';方法导致gui无法启动
我试图每秒钟在一个文本框中发送一条文本。关于如何使用Python 特金特';Tk().after()';方法导致gui无法启动,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我试图每秒钟在一个文本框中发送一条文本。关于如何使用Tk()。比如这个例子 root = Tk() def foo(): print(repeat) root.after(5000, foo()) foo() root.mainloop() 但是,尝试此解决方案时,主窗口从未出现。它也不会异常退出。我唯一能想到的是,在到达mainloop调用之前,我正在进入一个无限循环 这是我的代码的浓缩版本 def vp_start_gui(): global val, w, ro
Tk()。比如这个例子
root = Tk()
def foo():
print(repeat)
root.after(5000, foo())
foo()
root.mainloop()
但是,尝试此解决方案时,主窗口从未出现。它也不会异常退出。我唯一能想到的是,在到达mainloop
调用之前,我正在进入一个无限循环
这是我的代码的浓缩版本
def vp_start_gui():
global val, w, root
root = Tk()
top = MainWindow (root)
init(root, top)
root.mainloop()
class MainWindow():
def __init__():
self.widgets
def init(top, gui, *args, **kwargs):
global w, top_level, root
w = gui
top_level = top
root = top
root.after(15000,updateLoans(w, root))
def updateLoans(w, rt):
w.LoanOfferView.insert(END, viewModel.loanOffers())
w.LoanDemandView.insert(END, viewModel.loanDemands())
rt.after(15000,updateLoans(rt))
vp_start_gui()
viewModel
是第三个模块,它从API中提取非常少量的数据`LoanDemands是一个滚动文本小部件
有人知道会出什么问题吗
蟒蛇3.4
使用“页面”gui设计器开发tkinter UI在进入无限循环之前,程序需要等待一些东西。试试这个:
Button(root, text='start', command=foo).pack()
也请更换您的线路:
foo()
此外,在将函数传递给其他函数时,不应使用括号:
root.after(5000, foo)
所以我自己找到了这个问题的答案
编写不起作用的示例
root = Tk()
def foo():
print(repeat)
root.after(5000, foo())
foo()
root.mainloop()
对我有用的代码
root = Tk()
def foo():
print(repeat)
root.after(5000, foo)
foo()
root.mainloop()
在仔细阅读了我在底部引用的关于effbot的tkinter文档之后。我意识到函数名正在被引用,但函数本身实际上并没有在after()
方法中被调用
注册在给定时间后调用的报警回调
此方法注册一个回调函数,该函数将在
给定的毫秒数。Tkinter仅保证
回调不会在此之前调用;如果系统忙,
实际的延迟可能要长得多
对该方法的每次调用只调用一次回调。保存
调用回调时,需要在内部重新注册回调
本身:
类应用程序:
definit(自身、主控):
self.master=master
self.poll()#开始轮询
def poll(self):
... do something ...
self.master.after(100, self.poll)
(1) 不要调用foo()
,(2)您可能会发现阅读一些关于python类和self的使用的信息很有用。
您是正确的:您正在进入一个无限循环,因为您在之后调用,错误。这个答案的后一部分是正确的。这样做的目的是持续自动地更新某些内容。将命令放在函数中会破坏purpose@RileyHugh只需单击按钮一次即可触发无限循环。你可以在foo
开始时销毁它(在一些丑陋的事情之后,确保你只做一次)。您的方法每5秒打印一次重复。