2012-08-16 14 views
5

मैंने एक फ्रेम बनाया और फिर कैनवास बनाया।
मैं कैनवास पर एक बटन जोड़ने के लिए आगे क्या करना चाहता हूं।
हालांकि, जब मैंने बटन पैक किया तो मैं कैनवास नहीं देख सकता!आप टिंकर कैनवास पर एक बटन कैसे बनाते हैं?

यहाँ मैं क्या करने की कोशिश की है:

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 प्रबंधक, सही आकार के माता-पिता विजेट का आकार बदलने के लिए अपने बच्चे विजेट हो की कोशिश करता है, और कोई बड़ा डिफ़ॉल्ट रूप से। तो कैनवास वहां है - लेकिन यह बटन के समान आकार और इस प्रकार अदृश्य है।

# ... 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) रिश्तेदार पर ऊपरी-बाएं कोने के साथ अपने बटन पैदा करेगा:

आप के कारण कैनवास गतिशील आकार बदलने के लिए बिना एक कैनवास पर एक विजेट को रखना चाहते हैं, तो आप Canvas.create_window() समारोह चाहते हैं कैनवास के लिए, कैनवास का आकार बदलने के बिना।

ध्यान दें कि आप window तर्क को किसी अन्य टिंकर विजेट के संदर्भ में प्रतिस्थापित कर सकते हैं। एक चेतावनी, हालांकि: नामित विजेट शीर्ष-स्तरीय विंडो का बच्चा होना चाहिए जिसमें कैनवास, या एक ही शीर्ष-स्तरीय विंडो में स्थित कुछ विजेट का बच्चा होना चाहिए। यह इतना बड़ा बच्चा विजेट

http://effbot.org/tkinterbook/pack.htm#Tkinter.Pack.pack_propagate-method धारण करने के लिए बनाता है

+0

धन्यवाद, यह बहुत उपयोगी है! – Tony

2

आप button1.place (x = 0, y = 0) ज्यामिति प्रबंधक के बजाय पैक (पक्ष = टॉप) का उपयोग कर सकते पैक मास्टर विजेट का आकार बदलने

http://effbot.org/tkinterbook/place.htm

संबंधित मुद्दे