2013-05-03 4 views
0

Я уже давно работаю с python и Tkinter и решил сделать текстовую игру. Я знаю, как выполнять функции только в python, но я хочу иметь фактическое окно, а не только консоль. Я выяснил, как сделать окно и отобразить строку текста ... но я хочу, чтобы иметь возможность вводить и показывать этот текст.Tkinter: Установить переменную на строковый ввод

from Tkinter import * 

w=Tk() 

textvar="Welcome, to the PIT OF INSANLEY INTENSE THINGS... AND STUFF!!!" 

def key(event): 
    print event.char 

t=Text(w) 
t.insert(INSERT,textvar) 
t.configure(state=DISABLED) 
t.bind("<Key>",key) 
t.pack() 

w.mainloop() 

Этот код делает простое окно и отображает значение строковой переменной. Кроме того, я получил его, чтобы напечатать ключ, который вы нажимаете в консоли, однако я хочу, чтобы добавить эти символы в строку, чтобы вы могли видеть, что вы набираете. Это своего рода неотъемлемая часть текстовой игры :)

Буду признателен за любую помощь в этом. Спасибо

+0

Что вы хотите _probably_ является 'Entry' (или любитель текстового поля, как контроль), а не пытаться обрабатывать нажатия клавиш вручную. Есть ли причина, которая не подходит или вам нужен ответ, показывающий, как это сделать? – abarnert

+0

Я уже слышал о записях, но я их никогда не изучал. Я действительно не хочу всплывающее текстовое поле, а просто текст появляется в окне. Если это не слишком много работы, было бы неплохо увидеть пример, но это не имеет большого значения. –

+0

Это не всплывающее окно, а только редактируемый ящик в вашем окне. Я напишу пример, чтобы показать вам. – abarnert

ответ

0

Код, показанный ниже, показывает, как использовать Entry для получения текстового ввода от пользователя, вместо того, чтобы вручную обрабатывать ключевые события.

Он также показывает два разных способа, с помощью которых пользователь может запускать вас, нажав клавишу ввода/возврата, в то время как фокус ввода будет называться вашей функцией enter, а нажатие кнопки вызовет вашу функцию click. Есть всевозможные другие вещи, которые вы можете инициировать: каждое изменение содержания, каждое нажатие клавиши, потерять фокус записи ... Но этих двух должно быть достаточно, чтобы показать эту идею.

И наконец, в нем показано, как использовать содержимое Entry, чтобы изменить Text вместо того, чтобы просто печатать что-то на консоли. Трюк здесь заключается в том, что текст, доступный только для чтения, даже доступен только для чтения до insert/и т. Д. методы, поэтому вам нужно временно переключиться на NORMAL. (В Text документах объясняют это около трети пути вниз страницы.)

from Tkinter import * 

w=Tk() 

textvar="Welcome, to the PIT OF INSANLEY INTENSE THINGS... AND STUFF!!!" 

t=Text(w) 
t.insert(INSERT,textvar) 
t.configure(state=DISABLED) 
t.pack() 

def do_command(command): 
    t.configure(state=NORMAL) 
    t.insert(INSERT, '\nYou said, "{}"'.format(command)) 
    t.configure(state=DISABLED) 

e=Entry() 
e.pack(side=BOTTOM) 

def enter(event): 
    do_command(e.get()) 

e.bind('<KeyRelease-Return>', enter) 

def click(): 
    do_command(e.get()) 

b=Button(text='DOIT!', command=click) 
b.pack(side=BOTTOM) 

w.mainloop() 
+0

Спасибо большое! Как вы думаете, я могу просто изменить «print» на «return», чтобы отобразить текст в окне? –

+0

Ну, просто 'return' ничего не сделает. Но вы можете изменить его, чтобы добавить содержимое «Ввод» в конец содержимого «Текст» или что-то еще, что вы хотите. Позвольте мне изменить его, чтобы показать, как это сделать. – abarnert

+0

Спасибо за вашу помощь abarnert. теперь у меня есть шанс иметь демонстрационную игру для моего друга в субботу! –

Смежные вопросы