2012-08-16 23 views
5

我创建了一个框架,然后创建了一个画布。
接下来我要做的是在画布上添加一个按钮。
但是,当我打开按钮时,我看不到画布!如何在tkinter帆布上创建按钮?

这里是我的尝试:

from Tkinter import Tk, Canvas, Frame, Button 
from Tkinter import BOTH, W, NW, SUNKEN, TOP, X, FLAT, LEFT 

class Example(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self, parent) 
     self.parent = parent 
     self.initUI() 

    def initUI(self): 
     self.parent.title("Layout Test") 
     self.config(bg = '#F0F0F0') 
     self.pack(fill = BOTH, expand = 1) 
       #create canvas 
     canvas1 = Canvas(self, relief = FLAT, background = "#D2D2D2", 
              width = 180, height = 500) 
     canvas1.pack(side = TOP, anchor = NW, padx = 10, pady = 10) 
     #add quit button 
     button1 = Button(canvas1, text = "Quit", command = self.quit, 
                  anchor = W) 
     button1.configure(width = 10, activebackground = "#33B5E5", 
                 relief = FLAT) 
     button1.pack(side = TOP) 

def main(): 
    root = Tk() 
    root.geometry('800x600+10+50') 
    app = Example(root) 
    app.mainloop() 

if __name__ == '__main__': 
    main() 

回答

11

的Tkinter的pack经理试图父控件调整到正确的尺寸,以遏制其子控件,并没有较大的,默认情况下。所以画布就在那里 - 但它与按钮的尺寸完全相同,因此不可见。

如果您想放置一个小窗口的画布上没有引起帆布带动态调整,你想要的Canvas.create_window()功能:

# ... snip ... 
button1 = Button(self, text = "Quit", command = self.quit, anchor = W) 
button1.configure(width = 10, activebackground = "#33B5E5", relief = FLAT) 
button1_window = canvas1.create_window(10, 10, anchor=NW, window=button1) 

这将在(10, 10)相对创建左上角的按钮到画布,而无需调整画布本身的大小。

请注意,您可以将window参数替换为对任何其他Tkinter小部件的引用。但有一点需要注意:指定的窗口小部件必须是包含画布的顶层窗口的子窗口,或者位于同一顶层窗口中的某个窗口小部件的子窗口。

+0

谢谢,这非常有帮助! – Tony 2012-08-16 06:27:06