如何在主循环之前在Tkinter窗口中更新特定元素

时间:2019-06-11 21:47:59

标签: python-3.x tkinter

我想更新一个tkinter标签说一些文本,然后让我的计算机说出来。

由于某种原因,无论我将代码放在哪里,计算机都会在将其插入标签之前说出全部内容。

我正在创建一个聊天机器人-这是代码:

from tkinter import *
from random import choice
import os

ask = ["hi", "hello"]
hi = ["hi", "hello", "Hello too"]
error = ["sorry, i don't know", "what u said?"]

root = Tk()
user = StringVar()
bot = StringVar()

root.title(" Simple ChatBot ")
Label(root, text=" user : ").pack(side=LEFT)
Entry(root, textvariable=user).pack(side=LEFT)
Label(root, text=" Bot  : ").pack(side=LEFT)
Entry(root, textvariable=bot).pack(side=LEFT)


def main():
    question = user.get()
    if question in ask:
        response = choice(hi)
        bot.set(response)
        os.system("say '" + response + "'")
    else:
        bot.set(choice(error))


Button(root, text="speak", command=main).pack(side=LEFT)

mainloop()
  

所需的结果是程序将响应插入标签,然后说出来。

出于某种原因,它却相反。

1 个答案:

答案 0 :(得分:0)

尝试将os.system(...)更改为root.after(100, os.system, f"say '{response}'")

  

信用:acw1668