【问题标题】:Python tkinter: pausing a loop until key pressedPython tkinter:暂停循环直到按下键
【发布时间】:2022-01-06 07:30:24
【问题描述】:

我正在使用 tkinter 编写一段代码,如下所示:

def function_call():
    x = 5;
    for _ in range (10):
        ...
        ...
        ...
        //pause here until F9 is pressed
        


root = tk.Tk()
...
...
...
root.bind('<F1>', lambda event: function_call()) //Using F1 to invoke call

有谁知道如何暂停循环,直到按下 F9?请帮忙。

【问题讨论】:

  • 你的意思是代码在每次迭代结束时暂停,每次迭代按F9后继续?
  • 是的,就是这样

标签: python python-3.x tkinter


【解决方案1】:

tkinter 有一个函数 .wait_variable(var) 来暂停应用程序并等待 tkinter var 更新。所以你可以绑定 key &lt;F9&gt; 来更新 tkinter 变量来停止等待:

import tkinter as tk

def function_call(event=None):
    for i in range(10):
        print('Hello', i)
        # wait for pause_var to be updated
        root.wait_variable(pause_var)
    print('done')

root = tk.Tk()
# tkinter variable for .wait_variable()
pause_var = tk.StringVar()
root.bind('<F1>', function_call)
# press <F9> to update the tkinter variable
root.bind('<F9>', lambda e: pause_var.set(1))
root.mainloop()

请注意,如果 for 循环内的作业很耗时,那么最好在子线程中运行 function_call()。

【讨论】:

    【解决方案2】:

    这里有一些您可以构建的代码。它会一直等到“F9”键被按下,当按下它会改变文本。

    import tkinter as tk
    from tkinter import Label
    
    root = tk.Tk()
    root.geometry("300x300")
    
    state = 'startup'
    
    
    def loop():
        if state == 'startup':
            Label(text="The Game is starting now!").grid(row=0, column=0)
        elif state == 'running':
            Label(text="The Game is running now!").grid(row=0, column=0)
    
        root.after(20, loop)
    
    
    def key(event):
        global state
        if state == 'startup':
            state = 'running'
    
    
    root.bind('<Key-F9>', key)
    root.after(20, loop)
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 2021-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多