【问题标题】:Is there a way for a text to only show once a variable from a dialog box has been assigned?有没有办法让文本仅在分配对话框中的变量后才显示?
【发布时间】:2022-01-08 21:27:58
【问题描述】:

我对 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.”))

没有代码等待输入。有人有什么想法吗?

【问题讨论】:

    标签: python tkinter lambda window simpledialog


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 2022-09-25
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      相关资源
      最近更新 更多