2017-04-26 218 views
0

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

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

我想制作一个程序,画布中椭圆形的颜色根据按钮而改变。有关如何解决此问题的任何建议,非常感谢!

+3

请确保标题是一个问题,而不是“征求意见” –

+0

是的,我更新了它,但无济于事... – Newbie

+0

我无法得到此代码运行,有几个明确的错误消息。你在哪个版本的Python 2上?你不应该在同一个画布中混合'grid'和'pack'(参见[这里](http://stackoverflow.com/questions/23584325/cannot-use-geometry-manager-pack-inside))。 –

回答

1

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

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

  1. 请勿在同一个主窗口中使用gridpack
  2. 将一个command参数添加到Button构造函数中。
  3. 将一个函数作为参数传递给命令,我改变了你必须使用闭包来允许你仍然指定颜色参数。它基本上只是在另一个函数内部创建一个函数,然后返回那个稍后调用一些预加载状态(即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() 

另外请注意,在意见建议,你不必删除并重新创建椭圆形。您可以重新配置现有的。

+0

@Newbie是否回答了你的问题?如果考虑通过点击勾号来考虑接受它。 –