2015-04-19 31 views
0

我試圖做一個hang子手遊戲,並允許用戶輸入一個值來繪製hang子手。雖然它還沒有完成,但我在第二個畫布上應用文本字段時遇到了問題。每當我在第二個畫布上實現我的文本字段時,文本字段顯示,但畫布消失,只有hang子手出現。我想讓文本框出現在第二個畫布的頂部。任何人知道爲什麼或建議?爲什麼我的畫布在進行文本字段輸入後消失?

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,默認行爲是含有小部件(在這種情況下,一個畫布),以「縮小以適合」。所以,畫布正在消失,因爲它縮小到足以容納條目。

通常情況下,如果您將一個條目小部件添加到畫布中,則需要使用畫布的create_window方法。您可以關閉「縮小到適合」功能(使用名爲overrideredirect的方法),但很少是正確的解決方案。在不瞭解使用兩個畫布創建的效果的情況下,很難推薦正確的解決方案。

+0

噢好吧。感謝您的建議。我實現了create_window方法,它現在可以工作了! e = Entry(canvas2) canvas2.create_window(100,100,window = e) e.delete(0,END) e.insert(0,「輸入整數」)' –

相關問題