2015-04-19 2 views
0

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

from tkinter import * 
root = Tk() 

root.wm_title("HangMan") 

canvas = Canvas(root, height=400, width=800) 
canvas.pack() 

canvas2 = Canvas(root, bg="lightblue",height=400, width=800) 
canvas2.pack() 

text1 = canvas.create_text(15,15,anchor = "nw") 
canvas.itemconfig(text1, text = "Press Up, Down, Left, or Right") 


#Creates the pole 
a = canvas.create_rectangle(550,50,550,350,fill = "black") 
b = canvas.create_rectangle(350,50,550,50,fill = "black") 
c = canvas.create_rectangle(350,50,350,90,fill = "black") 

e = Entry(canvas2) 
e.pack() 

e.delete(0,END) 
e.insert(0, "enter a integer") 

#Creates man 
d = canvas.create_oval(325, 90, 375, 140, outline = "black") #head 
e = canvas.create_line(350, 140, 350, 230, fill = "black") #neck and torso 
f = canvas.create_line(300, 125, 350, 175, fill = "black") #left arm 
g = canvas.create_line(400, 125, 350, 175, fill = "black") #right arm 
h = canvas.create_line(350, 230, 310, 300, fill = "black") #left leg 
i = canvas.create_line(350, 230, 390, 300, fill = "black") #right leg 


root.mainloop() 

UPDATE:

теперь реализован метод create_window и теперь он работает!

e = Entry(canvas2) 

canvas2.create_window(100, 100, window = e) 

e.delete(0,END) 
e.insert(0, "enter a integer") 

ответ

1

При использовании pack, поведение по умолчанию для контейнера виджета (в данном случае, холст), чтобы «сжиматься, чтобы соответствовать». Таким образом, холст исчезает, потому что он сжимается, чтобы быть достаточно большим, чтобы содержать запись.

Как правило, если вы добавляете виджет ввода в холст, вы захотите использовать метод canvas для create_window. Вы можете отключить функцию «усадка в соответствии» (с помощью метода overrideredirect), но это очень редко является правильным решением. Не зная больше о эффекте, который вы пытаетесь создать, используя два холста, сложно рекомендовать правильное решение.

+0

О, ладно. Спасибо за совет. Я реализовал метод create_window, и теперь он работает! 'e = Ввод (canvas2) canvas2.create_window (100, 100, window = e) e.delete (0, END) e.insert (0," ввести целое число ")' –

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