为什么我的 canvas 在输入文本字段后消失了?
Why does my canvas disappear after making a text field entry?
我正在尝试制作一个刽子手游戏并允许用户输入一个值来绘制刽子手。虽然还没有完成,但我在将文本字段应用到我的第二个 canvas 上时遇到了问题。每当我在第二个 canvas 上实现我的文本字段时,文本字段就会出现,但 canvas 消失,只有刽子手出现。我想让文本字段出现在第二个 canvas 的顶部。有人知道原因或建议吗?
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")
当您使用 pack
时,默认行为是将包含的小部件(在本例中为 canvas)更改为 "shrink to fit"。所以,canvas 正在消失,因为它缩小到刚好足以包含条目。
通常,如果您要将条目小部件添加到 canvas,您需要使用 canvas 的 create_window
方法。您可以关闭 "shrink to fit" 功能(使用一种名为 overrideredirect
的方法),但这很少是正确的解决方案。在不了解您试图通过使用两个 canvas 来创建的效果的情况下,很难推荐正确的解决方案。
我正在尝试制作一个刽子手游戏并允许用户输入一个值来绘制刽子手。虽然还没有完成,但我在将文本字段应用到我的第二个 canvas 上时遇到了问题。每当我在第二个 canvas 上实现我的文本字段时,文本字段就会出现,但 canvas 消失,只有刽子手出现。我想让文本字段出现在第二个 canvas 的顶部。有人知道原因或建议吗?
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")
当您使用 pack
时,默认行为是将包含的小部件(在本例中为 canvas)更改为 "shrink to fit"。所以,canvas 正在消失,因为它缩小到刚好足以包含条目。
通常,如果您要将条目小部件添加到 canvas,您需要使用 canvas 的 create_window
方法。您可以关闭 "shrink to fit" 功能(使用一种名为 overrideredirect
的方法),但这很少是正确的解决方案。在不了解您试图通过使用两个 canvas 来创建的效果的情况下,很难推荐正确的解决方案。