Python tkinter:用按键替换输入?

时间:2014-04-28 00:39:59

标签: python-3.x tkinter

我是编程和python的新手,并且已经使用控制台编写了一个简单的基于文本的RPG来输出和输入。我想改为使用tkinter将文本输出转换为小部件,并通过键盘按键输入键。获得tkinter窗口布局后,我想知道如何获取不同的输入以使用tkinter事件。

def main_menu(hero):
choice = ' '
while choice not in ['0', '1', '2', '3']:
        while choice != '0' and hero.health > 0:
            print("\n" * 80)
            print(hero)
            print("Where would you like to go?\n"
                           "[1] Adventure\n"
                           "[2] Temple\n"
                           "[3] Store\n\n"
                           "[0] Save & Quit")
            choice = input(">")
            if choice == '1':
                adventure(hero)
            elif choice == '2':
                temple(hero)
            elif choice == '3':
                store(hero)
            elif choice == '0':
                save(hero)

当通过tkinter输入选择时,我希望它继续进入下一个功能,例如 store()我想得到一个新的从tkinter输入以解析下一个要调用的函数

def store(hero):
    item_type = ''
    while item_type not in ['1', '2', '3']:
        print("\n" * 80)
        print("What would you like to buy?"
                   "\n[1] Weapons"
                   "\n[2] Armor"
                   "\n\n[3] Leave")
        item_type = str(input(">"))
        if item_type == '1':
            weapon_store(hero)
            item_type = ''
        elif item_type == '2':
            armor_store(hero)
            item_type = ''
        else:
            input("Okay, have a good day.\n")

2 个答案:

答案 0 :(得分:0)

如果我能帮助你,

  

我想更改为使用tkinter将文本输出到窗口小部件

为此,我们使用Labels。我们举一个简短的例子:

var = StringVar()
label = Label( root, textvariable=var, relief=RAISED )

var.set("Hey!? How are you doing?")
label.pack()

用于设置标签的内容。您可以使用字符串变量&你可以随时改变它。

  

通过键盘按键输入

def key(event):
    print "pressed", repr(event.char)

def callback(event):
    frame.focus_set()
    print "clicked at", event.x, event.y 

frame = Frame(root, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()

如果您运行此脚本,您会发现在开始接收任何键盘事件之前必须先单击框架。

详细了解events and bindings at effbot

答案 1 :(得分:0)

我设法通过将按键更改为StringVar然后在我希望它接收新输入的代码中使用wait_variable来解决我的问题。