0

我对 Python 有点陌生(如果有帮助,可以使用 3.8 和 PyCharm),我一直在尝试使用 tkinter 制作一个基于文本的小游戏。到目前为止,我编写的所有内容都有效,除了需要一行等待分配变量执行的部分。它在窗口顶部显示混乱的数字和字母,但随后它可以正常运行其余代码。但是,它永远不会正确运行最后一行,也不会等待分配变量。

这是我当前的代码:

import time
import tkinter
import tkinter as tk
from tkinter import *
from tkinter import simpledialog

window = tk.Tk()

T = tk.Text(window, height=20, width=90, bg="black", font="courier", fg="lightgreen", background="black")
T.pack()
T.insert(tk.END, "ELFLAB UNION TERMINAL 300")
window.after(2000, lambda: T.insert(tk.INSERT, "\nBooting"))
window.after(2500, lambda: T.insert(tk.END, "."))
window.after(3500, lambda: T.insert(tk.END, "."))
window.after(4500, lambda: T.insert(tk.END, "."))
window.after(6000, lambda: T.insert(tk.INSERT, "\nBooting"))
window.after(6500, lambda: T.insert(tk.END, "."))
window.after(7500, lambda: T.insert(tk.END, "."))
window.after(8500, lambda: T.insert(tk.END, "."))
window.after(10000, lambda: T.insert(tk.END, "\nSYSTEM INITIALIZED"))
window.after(11000, lambda: T.insert(tk.END, "\nWhat is your Name?"))
name1 = window.after(12000, lambda: simpledialog.askstring(title="USER CONSOLE", prompt="Enter your name"))
T.insert(tk.INSERT, lambda: T.insert(tk.INSERT, "\nHello " + name1 + ", I am Elfster, Your personal Terminal Assistant."))


tk.mainloop()

我已经为底部尝试了很多不同的方法。

window.after_close(window)
window.after(1000, lambda: T.insert(tk.INSERT, “\nHello “ + name1 + “, I am Elfster, your personal Terminal Assistant.”))

或者:

window.after_close(window)
T.insert(tk.INSERT, “\nHello “ + name1 + “, I am Elfster, your personal Terminal Assistant.”))

没有代码等待输入。有没有人有任何想法?

4

1 回答 1

1

当您在运行时调用它时,Tkinter 会一直等到您销毁对话框窗口。这里的问题是,当 tkinter 初始化它时,它总是违反该规则。因此,解决方案是将您想要的功能外包给一个看起来像这样的函数:

def ask():
    name1 = simpledialog.askstring(title="USER CONSOLE", prompt="Enter your name")
    T.insert(tk.INSERT, "\nHello " + name1 + ", I am Elfster, Your personal Terminal Assistant.")

要在正确的时间运行该代码,您仍然可以使用.afterlambda表达式,如下所示:

window.after(12000, ask)
于 2022-01-09T05:40:56.873 回答