首页 文章

tkinter canvas gui不加载[关闭]

提问于
浏览
0

我是一个新的程序员,在使用类和Tkinter方面相对较新 . 我有一个问题,我的Tkinter窗口不会弹出,也不会显示任何错误 .

import Tkinter
from Tkinter import Canvas, Button

root = Tkinter.Tk()
canvas = Canvas(root, width=360, height=360, bg="white")
canvas.grid()

color = canvas.create_oval(100, 100, 160, 160, fill = "white")

def changeColor(x):
    canvas.delete(color)
    c = canvas.create_oval(100, 100, 160, 160)
    canvas.itemconfigure(c,fill = x)


pink = Button(root, text = "This is just a button",changeColor("pink"))
pink.pack()

brown = Button(root, text = "This is brown",changeColor("brown"))
brown.pack()

root.mainloop()

我想制作一个程序,其中画布中椭圆的颜色根据按钮而变化 . 任何关于如何解决这个问题的建议都非常感谢!

1 回答

  • 1

    如果您的环境隐藏了您的 tkinter 错误消息,我会担心 . 如果您再遇到这种情况,我建议尽可能在IDE /环境之外运行您的代码 .

    无论如何这里是带有错误的代码,阻止它运行固定 .

    • 不要在同一主窗口中使用 gridpack .

    • command 参数添加到 Button 构造函数 .

    • 将一个函数作为参数传递给命令,我改变了你必须使用一个闭包来允许你仍然指定颜色参数 . 它基本上只是在另一个函数内部创建一个函数并返回该内部函数,并带有一些预加载状态(即 x ),以便稍后调用 .

    码:

    import Tkinter
    from Tkinter import Canvas, Button
    
    root = Tkinter.Tk()
    canvas = Canvas(root, width=360, height=360, bg="white")
    canvas.grid()
    
    color = canvas.create_oval(100, 100, 160, 160, fill = "white")
    
    def changeColor(x):
        def f():
            canvas.itemconfig(color, fill = x)
    
        return f
    
    
    pink = Button(root, text = "This is just a button", command=changeColor("pink"))
    pink.grid()
    
    brown = Button(root, text = "This is brown", command=changeColor("brown"))
    brown.grid()
    
    root.mainloop()
    

    另请注意,正如注释中所建议的那样,您无需删除并重新创建椭圆 . 您可以重新配置现有的一个 .

相关问题