Как обрабатывать события без очереди? - PullRequest
0 голосов
/ 03 ноября 2018

Если я изменю цвет кнопки в событии щелчка. Это происходит после других событий. Например, здесь цвет меняется после завершения звука.
Как я могу это исправить?

import tkinter as tk
import winsound

def clicked():
    but['background'] = 'red'
    winsound.Beep(500, 2000)

root = tk.Tk()
frame = tk.Frame(root)
frame.pack()

but = tk.Button(frame, command=clicked)
but.pack(side=tk.LEFT)

root.mainloop()

1 Ответ

0 голосов
/ 03 ноября 2018

Я думаю, что многопоточность здесь будет лучше. Я смог заставить его работать с root.after(10, lambda: winsound.Beep(500, 2000)), но это было немного, и это все еще блокировало визуальное отображение нажатия кнопки во время звукового сигнала.

Вот вариант с резьбой.

import tkinter as tk
import threading
import winsound

def clicked():
    but['background'] = 'red'
    threading.Thread(target=win_sound).start()

def win_sound():
    winsound.Beep(500, 2000)


root = tk.Tk()
frame = tk.Frame(root)
frame.pack()

but = tk.Button(frame, command=clicked)
but.pack(side=tk.LEFT)

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