Python TKinter:如何在GUI中达到与input()相同的效果?

时间:2019-12-01 19:20:15

标签: python tkinter

一个半月前,我开始学习python。因此,请原谅我的一切不足。

我正在制作一个基于文本的冒险游戏。该游戏已编写并可以在终端上玩。我现在想添加一个GUI。

在一个文件中,我有:

class Parser():

    def __init__(self):
        self.commands = CommandWords()

    def get_command(self):
        # Initialise word1 and word2 to <None>
        word1 = None
        word2 = None

        input_line = input( "> " )

        tokens = input_line.strip().split( " " )
        if len( tokens ) > 0:
            word1 = tokens[0]
            if len( tokens ) > 1:
                word2 = tokens[1]

只要用户希望输入文本,就会调用此方法,然后它将调用另一个函数,以将输入内容与已知的命令进行比较,以继续进行游戏。

但是,当我尝试将input()替换为entry_widget.get()时,它无法识别entry_widget。 因此我导入了包含GUI脚本的文件,这是一个循环导入错误。

我试图将输入存储为字符串变量,但是程序不会停止并等待用户输入,因此在程序开始运行的那一刻它就卡住了,不知道如何处理空值(假设input()停止了程序并等待用户输入?)

有解决方案吗?还是更好的方法呢?

谢谢。

1 个答案:

答案 0 :(得分:0)

import tkinter as tk

要创建条目小部件,请执行以下操作:entry = tk.Entry(root)

有了这些,您可以随时获取文本:text = entry.get()

要让程序等待,您需要创建一个tkinter变量:wait_var = tk.IntVar()

,然后创建一个按钮,该按钮在按下时会更改变量的值:button = tk.Button(root, text="Enter", command=lambda: wait_var.set(1))

现在,您可以告诉tkinter等到变量更改:button.wait_variable(wait_var)

简单的例子:

import tkinter as tk


def callback():
    print(entry.get())
    wait_var.set(1)


root = tk.Tk()

wait_var = tk.IntVar()

entry = tk.Entry(root)
button = tk.Button(root, text="Enter", command=callback)

entry.pack()
button.pack()

print("Waiting for button press...")
button.wait_variable(wait_var)
print("Button pressed!")

root.mainloop()