【问题标题】:Running Tkinter alongside a Textual Game?将 Tkinter 与文本游戏一起运行?
【发布时间】:2012-04-27 19:58:29
【问题描述】:

如何允许从 IDLE 命令行上的文本输入更新图形?如果我有类似的东西:

from Tkinter import *

root = Tk()
can = Canvas(root, height=500, width=100)
can.pack()
mainloop()

x = input("what is a number? ")
print x

会出现窗口,但不会出现命令行提示。关于我如何允许这样做的任何想法?

【问题讨论】:

  • 你需要彻底重新考虑一旦你抛出一个事件循环,你是如何进行输入的。
  • 尝试将代码行放在它上面的主循环下:)
  • 问题是,当您有效地生成 GUI 时,为什么您希望输入来自命令行?通常,您可能希望创建一个提示用户输入数字的顶级窗口,让他们在输入字段中输入它,然后将该值返回给您的程序......当然,您总是可以定义一个回调,提示输入一个数字,但你会冻结你的 GUI,直到用户输入一个数字......

标签: python user-interface tkinter


【解决方案1】:

如果它只是用于调试或一次性配置/输入,您可以将其作为命令行参数传递给您的程序,或者将提示代码放在 mainloop() 调用之前的任何位置。另一方面,如果它是对游戏的持续输入,您应该在主窗体中添加一个文本输入字段,可能还有一个按钮,以便用户可以输入数据并按下按钮以指示他们何时完成输入并拥有一个事件处理程序绑定到按钮处理输入字段的内容。

如果以上都没有多大意义,请查看网站TkDocs,其中包含许多有关 Tk 的有用信息,包括如何使用 Python(以及其他语言)进行所有调用的代码示例。

【讨论】:

    【解决方案2】:

    我建议只使用 tkinter 的小部件。

    import Tkinter as tk
    
    def numEntered(*args):
        print x.get()
        x.set('')
        return
    
    root = tk.Tk()
    can = tk.Canvas(root, height=500, width=100)
    can.pack()
    
    inputFrame=tk.LabelFrame(root, text="What is a number?")
    inputFrame.pack()
    
    x=tk.StringVar()
    inputEntry=tk.Entry(inputFrame,textvariable=x)
    inputEntry.pack()
    
    inputEntry.bind('<Return>',numEntered)
    
    tk.mainloop()
    

    注意几个项目: 1)我将文本条目放在标签框架中,这在您使用包几何管理器时会有所帮助。 2)当用户输入一个数字并按下回车键时,我使用bind方法执行该功能。 3) 函数打印数字,然后清除变量。

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2020-05-17
      • 1970-01-01
      相关资源
      最近更新 更多