Как воспроизводить звук при каждом нажатии кнопки без зависания Tkinter - PullRequest
2 голосов
/ 04 апреля 2020

Я возился с проектом Tkinter, который я закончил пару дней go, и я хотел добавить несколько звуков, чтобы сделать его немного интереснее.

Я добавил звуки кнопок со звуком winsound следующим образом:

(упрощенный код)

import winsound
from Tkinter import *

root = Tk()

canvas = Canvas(root, height=500, width=500)
canvas.pack()

def printtext():
    winsound.PlaySound("button.wav", winsound.SND_ALIAS)
    print("Hi")

button = Button(root, text=("button"), command=printtext)
button.pack()    

root.mainloop()

Это технически работает, но, поскольку код работает синхронно, GUI зависает до Звук воспроизводится полностью.

Чтобы решить эту проблему, я использовал потоки для воспроизведения звука в фоновом режиме, в то время как остальные функции выполняются.

вот так:

(упрощенный код)

import winsound
import threading
from tkinter import *

root = Tk()

canvas = Canvas(root, height=500, width=500)
canvas.pack()

def playsound():
    winsound.PlaySound("button.wav", winsound.SND_ALIAS)

threadsound = threading.Thread(target=playsound)

def printtext():
    threadsound.start()
    print("Hi")

button = Button(root, text=("button"), command=printtext)
button.pack()    

root.mainloop()

Опять же, это технически работает, но потоки могут быть запущены только один раз, поэтому я застрял здесь.

Есть ли другой способ добиться этого?

1 Ответ

1 голос
/ 06 апреля 2020

Итак, в итоге я удалил этот бит кода и заменил его модулем pygame, потому что я нахожу его более гибким, но да, перемещение threadound = ... в printtext (), как указал acw1668, решает проблему, с которой я столкнулся с темой

большое спасибо acw1668

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...