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



我一个半月前开始学习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]

每当用户需要输入文本时,都会调用它,然后它将调用另一个函数将输入与已知命令进行比较以移动游戏。

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

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

有什么解决办法吗?还是更好的方法?

谢谢。

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()

最新更新