2012-08-16 21 views
5

Bir Çerçeve ve ardından bir Tuval oluşturdum.
Bundan sonra yapmak istediğim, Tuval Üzerine Düğme eklemektir.
Ancak, Düğmeyi paketlediğimde Tuvali göremiyorum! İşteTinkter Canvas'da Bir Düğme nasıl oluşturulur?

denedim budur:

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

cevap

11

Tkinter pack yöneticisi varsayılan olarak, onun alt widget'lar içerecek şekilde doğru boyuta ana widget'ı yeniden boyutlandırmak çalışır ve büyük olamaz. Bu yüzden tuval var - ama tam olarak düğme ile aynı boyutta ve dolayısıyla görünmez.

# ... 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) 

Bu göreceli (10, 10) de sol üst köşesine ile düğme oluşturur: Bu tuval dinamik yeniden boyutlandırmak neden olmadan tuval bir widget yerleştirmek istiyorsanız

, sen Canvas.create_window() fonksiyonunu istiyorum tuvalin kendisini yeniden boyutlandırmadan tuvale.

window argümanını başka bir Tkinter widget'ına referansla değiştirebileceğinizi unutmayın. Yine de bir uyarı: adlandırılmış pencere öğesi, tuvali içeren üst düzey pencerenin alt öğesi veya aynı üst düzey pencerede bulunan bir pencere aracının alt öğesi olmalıdır.

+0

sayesinde o kadar çok yararlı olur! – Tony