【问题标题】:Tkinter while loop in background [duplicate]Tkinter while 在后台循环[重复]
【发布时间】:2020-01-18 17:40:11
【问题描述】:

我正在 Tkinter 中编写节拍器代码,其中会弹出一个带有文本框的窗口,您可以在其中输入 bpm 和退出按钮来停止代码。我遇到了一个问题,当播放节拍声音的 while 循环正在运行时,我无法单击窗口上的任何内容,因此,我无法单击退出按钮。我(简要地)尝试过线程,但我发现它在执行之前运行了所有代码,因此它将文本框读取为空并在代码将字符串转换为整数以计算播放频率时返回值错误一拍。简而言之,我需要在 Tkinter 窗口的背景中运行一个 while 循环。 这是我的代码:

from tkinter import *
from time import sleep
import os
import sys
def quit_():
    screen.destroy()
    sys.exit()
def run():
    bpm = bpm_.get()
    bpm = int(bpm)
    bpm = bpm/60
    bpm = 1/bpm
    while True:
            sleep(bpm)
            os.system("afplay metronome.wav&")

def main():
    global bpm_
    bpm_ = StringVar()
    Label(screen, text="").pack()
    Label(screen, text = "enter a bpm").pack()
    entry = Entry(screen, textvariable=bpm_)
    entry.pack()
    Label(screen, text="").pack()
    Button(screen, text = "enter", command = run).pack()
    Label(screen, text="").pack()
    Button(screen, text = "quit", command = quit_).pack()
screen = Tk()
main()
screen.mainloop()

【问题讨论】:

标签: python python-3.x loops tkinter


【解决方案1】:

有一个命令可以在您单击按钮后自动运行功能,而不是:

while True:
    sleep(bpm)
    os.system("afplay metronome.wav&")

放:

sleep(bpm)
os.system("afplay metronome.wav&")
screen.after(1,run)

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 2011-02-04
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    相关资源
    最近更新 更多