为什么我的画布在输入文本字段后会消失?

时间:2015-04-19 19:40:53

标签: python canvas text tkinter

我试图制作一个刽子手游戏,并允许用户输入一个值来绘制刽子手。虽然它尚未完成,但在将文本字段应用到我的第二个画布上时,我遇到了问题。每当我将文本字段实现到第二个画布上时,文本字段都会显示,但画布会消失,只显示挂起。我希望文本字段显示在第二个画布的顶部。有谁知道为什么或建议?

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()

更新:

我现在实现了create_window方法,现在它可以工作了!

e = Entry(canvas2)

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

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

1 个答案:

答案 0 :(得分:1)

当您使用pack时,默认行为是包含窗口小部件(在本例中为画布)“缩小到适合”。因此,画布正在消失,因为它缩小到足以容纳条目。

通常,如果要向画布添加条目小部件,则需要使用画布的create_window方法。您可以关闭“缩小到适合”功能(使用名为overrideredirect的方法),但它很少是正确的解决方案。如果不了解您尝试使用两个画布创建的效果,则很难推荐正确的解决方案。