User interface canvas.create\u窗口不工作?
我想在画布中放置一个小部件。 我编写了以下函数来创建一个按钮并显示它。 在画布x坐标的中心User interface canvas.create\u窗口不工作?,user-interface,canvas,tkinter,widget,User Interface,Canvas,Tkinter,Widget,我想在画布中放置一个小部件。 我编写了以下函数来创建一个按钮并显示它。 在画布x坐标的中心 def Button_Placer(): label1=Label(canvas, width =20, height = 2, font = font2, text="") label1.pack() def Show_Name(): name=NameGenerator() label1.config(text=name) button1=Button(canvas, text="Ge
def Button_Placer():
label1=Label(canvas, width =20, height = 2, font = font2, text="")
label1.pack()
def Show_Name():
name=NameGenerator()
label1.config(text=name)
button1=Button(canvas, text="Generate Name", width=20, height=4, font=font1, command=Show_Name)
button1=canvas.create_window(250, 300)
我还在顶部创建了一个画布:
canvas = Canvas(root, width=500, height = 500, bg="red")
canvas.pack()
很遗憾,canvas.create\u窗口无法工作。pack()可以工作,但这不是我需要的。我已经看过了其他的例子,但是它们都是非面向对象的,因此我认为它与我的理解无关。正如@CommonSense所写的,尝试
canvas.create_window(200200,window=button1)
还有,;在函数中创建label1
,当函数退出时,名称label1
将被垃圾收集
在画布上创建小部件时,引用是一个整数;画布上该小部件的索引。如果使用小部件名称作为画布小部件的引用,则会丢失对实际小部件的引用
请尝试以下示例:
from tkinter import *
root = Tk()
canvas = Canvas(root, width=500, height=500, bg="red")
canvas.pack()
def Show_Name():
name = 'A name' # No function NameGenerator()
label1.config(text=name)
button1 = Button(canvas, text="Generate Name", width=20, height=4,
command=Show_Name)
canvas_button1 = canvas.create_window(250, 300, window=button1)
label1 = Label(canvas, width=20, height=2, text="")
canvas_label1 = canvas.create_window(250, 200, window=label1)
尝试
画布。创建_窗口(200200,窗口=按钮1)
()未工作。相同的结果-未显示任何内容请创建一个。您的问题缺乏足够的详细信息,我们无法诊断问题。已更新更多信息。抱歉,汉克斯。对于未来的功能,我将创建更多的窗口。不断创建更多窗口是否效率低下?或者我应该尝试在一个单独的窗口中组合更多的小部件吗?您可以创建一个框架并用小部件填充它,然后使用create\u window
在画布上显示该框架。就像使用普通框架一样工作。效率更高吗?你会推荐吗?如果你有多个相关的小部件,它会让你更容易处理它们。Bot如果您要构建一个复杂的GUI,那么您可能应该使用常规框架而不是画布。如果你愿意,可能性是存在的。我建议你做一些简单易维护的事情。两个都测试一下,看看你喜欢什么。谢谢