我正在做我的第一个大项目,即测验。我一直试图限制用户回答问题的时间。我已经搜索了很多小时,并且似乎唯一可行的选择是使用计时器线程。我根本不擅长线程或任何稍微高级的tkInter,所以我很高兴。
def版本模式(问题): inputAnswer = StringVar()
#-----Creation & placement of buttons and labels
qLabel = Label(screen1, text = question.prompt[0]
qLabel.grid(row = 6, column = 2)
answerBox = Entry(screen1, textvariable = inputAnswer)
answerBox.grid(column = 2, row = 10)
t = Timer(7.0, nextQuestion, args=(False, question.difficulty), kwargs=None)
t.start()
#-----The button that will trigger the validation of the answer
Button(screen1, text = "Submit", command = lambda: checkAnswer(question)).grid(column = 3, row = 9)
我从中得到的错误是:RuntimeError:主线程不在主循环中。根据我的理解和绝望的谷歌搜索,tkinter和线程不能很好地协同工作,并且我已经看到了使用Queue的解决方案。
任何帮助,建议和技巧都将不胜感激! :D
答案 0 :(得分:1)
您不需要计时器线程即可完成此简单操作。 Tkinter窗口小部件具有一种名为after
的方法,将来可用于运行命令。
例如,要在7秒钟后致电nextQuestion
,您可以这样做:
screen1.after(7000, nextQuestion, False, question.difficulty)
如果要取消计时器,请保存返回值并在调用after_cancel
中使用它:
after_id = screen1.after(7000, nextQuestion, False, question.difficulty)
...
screen1.after_cancel(after_id)