【问题标题】:Python TKinter: How do I achieve the same effect as input() in the GUI?Python TKinter:如何在 GUI 中实现与 input() 相同的效果?
【发布时间】:2019-12-01 19:20:15
【问题描述】:

一个半月前我开始学习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() 停止程序并等待用户输入?)

有什么解决办法吗?或者更好的方法来做到这一点?

谢谢。

【问题讨论】:

标签: python tkinter


【解决方案1】:

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

【讨论】:

  • 那么我应该在上面显示的解析器脚本中放入什么而不是“input_line = input()”?
猜你喜欢
  • 2013-01-27
  • 2021-11-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2022-08-04
  • 2011-10-07
相关资源
最近更新 更多