【问题标题】:Loop in thread stopping when using Tkinter使用 Tkinter 时线程停止循环
【发布时间】:2021-03-24 03:53:23
【问题描述】:

我的代码如下。它意味着当用户单击 CTRL + X 时弹出一个 tkinter 窗口,并在按下 CTRL + A 时关闭该窗口。问题是当窗口在打开后关闭时,lookForKeys 中的 while 循环会停止。

import tkinter as tk
from threading import Thread
import keyboard as k

running = False


def main():
    global root
    print('Opening...')
    root = tk.Tk()
    root.geometry("340x740+1550+50")
    root.title('Custom Mic')
    root.resizable(0,0)    
    root.attributes('-topmost', True)
    root.update()

    root.mainloop()

def closeOverlay():
    print('Closing...')
    root.destroy()
    root.quit()


def openOverlay():
    global overlayThread
    print('Opening...')
    overlayThread = Thread(target = main)
    overlayThread.start()

def lookForKeys():
    global running

    while True:
        print(running)
        if k.is_pressed("ctrl+x") and running == False:
            running = True
            openOverlay()

        if k.is_pressed("ctrl+a") and running == True:
            running = False
            closeOverlay()

if __name__ == "__main__":
    mainThread = Thread(target = lookForKeys)
    mainThread.start()

感谢任何帮助。

【问题讨论】:

    标签: python multithreading tkinter


    【解决方案1】:

    我将函数 closeOverlay 放在一个线程中,它工作了。

            if k.is_pressed("ctrl+a") and running == True:
                running = False
                closeOverlayThread = Thread(target=closeOverlay)
                closeOverlayThread.start()
    
    

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 2012-03-18
      • 1970-01-01
      • 2021-01-11
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-06-09
      相关资源
      最近更新 更多