2013-07-02 2 views
1

Я хочу создать поле userinput для целых чисел внутри холста, созданного с помощью Tkinter. Как я буду заниматься этим?Python - ввод текста в холст Tkinter

def gamescreen(): 
    photo = PhotoImage(file="gamescreen.gif") 
    canvas.bind("<Button-1>", buttonclick_gamescreen) 
    canvas.pack(expand = YES, fill = BOTH) 
    canvas.create_image(1, 1, image = photo, anchor = NW) 
    e1 = Entry(canvas) 
    e2 = Entry(canvas) 
    game1 = PhotoImage(file="1.gif") 
    canvas.create_image(30, 65, image = game1, anchor = NW) 
    canvas.create_window(window = e1, x=10, y=10) 
    canvas.create_window(window = e2 , x=400, y=10)  
    canvas.update() 
    window.mainloop() 

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

Благодарим за помощь.

EDIT: Я обновил код с предоставленными предложениями. Теперь у меня есть проблема с

IndexError: tuple index out of range 

Это происходит в строках ниже

canvas.create_window(window = e1, x=10, y=10) 
canvas.create_window(window = e2, x=400, y=10) 

EDIT: Хорошо, я понял, что был неправ, я должен был удалить х = и у = и просто координаты сами по себе. Появятся окна ввода.

+2

Основываясь на вашем коде, если вы хотите сделать игру, вы должны действительно проверить Pygame (http://pygame.org). –

+0

или почему бы не использовать gtk? http://python-gtk-3-tutorial.readthedocs.org/en/latest/ – NoBugs

+0

Спасибо за ответы, но это для оценки в старшей школе, поэтому я не был уверен, могу ли я узнать, как использовать Pygame или gtk в время. – ThatsNotMyName

ответ

3

Хорошо, я прочитал, что на самом деле есть кортеж, и я смог исправить ошибку.

Просто нужно было удалить x = и y = так, чтобы координаты окна были сами по себе.

0

Раскомментируйте свои e1 и e2. Вы должны использовать функцию .pack().

e1.pack() 
e2.pack() 

Это должно заставить его пойти на экран, остальное зависит от вас!

РЕДАКТИРОВАТЬ: Также не должен быть холст.mainloop()? Определено ли окно или есть холст?

+0

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

+0

пакет почти наверняка не будет делать то, что хочет OP - он не помещает запись _on_ в холст. Он создаст холст, чтобы сжиматься, чтобы он соответствовал виджету ввода, и виджет ввода не будет прокручиваться вместе с содержимым холста. –

2

Вы можете использовать create_window, чтобы разместить виджет на холсте.

e1 = Entry(canvas) 
canvas.create_window(window=e1, 400, 10) 
+1

Спасибо за ваш ответ, но я, похоже, столкнулся с другой ошибкой. На этот раз он отображает «IndexError: индекс tuple вне диапазона» Я искал сообщение об ошибке здесь и в Google, но не нашел ничего связанного. :/ – ThatsNotMyName

+0

Пожалуйста, исправьте свой ответ. –

+0

@ReutSharabani: исправлено. Спасибо, что сообщили мне об ошибке. –

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