Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface canvas.create\u窗口不工作?_User Interface_Canvas_Tkinter_Widget - Fatal编程技术网

User interface canvas.create\u窗口不工作?

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

我想在画布中放置一个小部件。 我编写了以下函数来创建一个按钮并显示它。 在画布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="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,那么您可能应该使用常规框架而不是画布。如果你愿意,可能性是存在的。我建议你做一些简单易维护的事情。两个都测试一下,看看你喜欢什么。谢谢