【问题标题】:command function in tkinter does not work properlytkinter 中的命令功能无法正常工作
【发布时间】:2020-06-28 10:42:37
【问题描述】:

我试图用 tkinter 在 python 中实现我的第一个 gui。 我有这个功能:

def clicked():
    if(b2["text"]=="Start Recording"):
        b2["text"]="Stop Recording"
    elif(b2["text"]=="Stop Recording"):
        b2["text"]="Start Recording"
    stt.start_speech_to_text("prove.txt")

其中 stt 是我实现的一个模块,它使用谷歌云语音转文本库将麦克风中的语音转换为文本。

我是这样把这个函数放到一个按钮里面的:

b2 = Button(root, text='Start Recording',command=clicked)

但是当我运行代码并按下按钮时,程序会从调用 start_speech_to_text 函数开始,并且只有当我停止执行该函数时,按钮才会更改其标签。

我该如何解决这个问题? 谢谢

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    您需要在start_speech_to_text 函数中添加root.update_idletasks()root.update()mainloop 在从 start_speech_to_text 函数接收控制权之前不会更新/重绘小部件,因此标签中的更新只能在函数执行后才能看到

    【讨论】:

    • 如果函数在另一个模块中,我可以插入这个命令吗?
    • 您必须将root 的引用发送到此模块。只有这样它才会更新。但这执行起来很痛苦(取决于模块的复杂性)。最好运行短循环,或者确保代码不时返回到主函数
    • 好的,我现在解决了。我也会努力提高效率。谢谢!
    • 短循环是什么意思?我应该把这些循环放在哪里?
    • 我使用多线程解决了 :) 可能这是最优雅的方式
    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 2020-07-09
    • 2013-11-06
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多