python - 当用户点击 "continue"时,tkinter 窗口在播放音效后卡住

标签 python tkinter

当我尝试在用户通过测试后播放“yay”音效时,我会显示制作人员名单。不过考虑到有些用户不耐烦,不想看,所以我做了一个tkinter窗口来显示是否看的选项。但是当用户单击“继续”时,tk 窗口卡住( Freezed window ),过了一会儿,又恢复正常了。
这可能不是一个很大的问题。但如果编译成exe文件,可能会导致突然退出而没有任何警告,这不是一个好的用户体验。那么有什么办法可以阻止卡住呢?
这是窗口卡住的代码的一部分。

class Success(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Yay! You have passed my chemistry challenge! Would you like to continue?",
                         font=LARGE_FONT)
        label.pack(pady=10, padx=10)
        button1 = tk.Button(self, text="Continue", command=lambda: [controller.show_frame(Credits), success1()])
        button1.pack()
        button2 = tk.Button(self, text="Quit", command=lambda: controller.destroy())
        button2.pack()

    def correspondingBehavior(self, choice):
        print(choice)


class Credits(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self,
                         text="Credits: bababa..." )
        label.pack(pady=10, padx=10)
        button1 = tk.Button(self, text="Quit", command=lambda: controller.destroy())
        button1.pack()

    def correspondingBehavior(self, choice):
        print(choice)

在编写代码之前,我导入了 playsound 模块并定义了 success1() 函数,如下所示:

def success1():
    playsound("D:/Personal/Game/Yah.mp3")

最佳答案

不要让它阻塞主线程:

def success1():
    playsound("D:/Personal/Game/Yah.mp3", block=False)

或者您可以创建一个新的线程,但这可能会导致tkinter稍后崩溃。

关于python - 当用户点击 "continue"时,tkinter 窗口在播放音效后卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67298813/

相关文章:

python - KeyError : "Couldn' t find enum caffe. EmitConstraint.EmitType"

python - 使用 Python 进行 Modbus TCP

python - 使用两个模型进行全文搜索

python - TKinter 中的阿拉伯语文本

python - 根据单选按钮答案更改框架

python - tkinter/py2app 创建的应用程序在初始启动时不显示窗口

python - 有没有办法比较阿拉伯字符而不考虑它们的初始/中间/最终形式?

python - Matplotlib imshow 与 EPS

Python - Tkinter 按钮命令不起作用

Python:tkinter从类中删除对象并使其不可见