2017-04-26 224 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是否回答了你的問題?如果考慮通過點擊勾號來考慮接受它。 –