2015-03-28 7 views
6

तो मैं स्क्रॉलबार वाले लेबलों से भरा फ्रेम बनाने के लिए टिंकर में कैनवास विजेट का उपयोग कर रहा हूं। सब कुछ अच्छा काम कर रहा है सिवाय इसके कि फ्रेम केवल इसमें रखे गए लेबल के आकार तक फैलता है - मैं चाहता हूं कि फ्रेम पैरेंट कैनवास के आकार में विस्तारित हो।टिंकर: कैनवास के आकार में विस्तार करने के लिए कैनवास विंडो में फ्रेम कैसे प्राप्त करें?

यदि मैं कैनवास में फ्रेम के लिए पैक (विस्तार = सही) (जिसे मैंने नीचे दिए गए कोड में टिप्पणी की है) का उपयोग किया है तो यह आसानी से किया जा सकता है लेकिन फिर स्क्रॉलबार काम नहीं करता है।

यहाँ कोड का उचित सा है:

 self.canvas = Canvas(frame, bg = 'pink') 
     self.canvas.pack(side = RIGHT, fill = BOTH, expand = True) 

     self.mailbox_frame = Frame(self.canvas, bg = 'purple') 

     self.canvas.create_window((0,0),window=self.mailbox_frame, anchor = NW) 

     #self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True) 

     mail_scroll = Scrollbar(self.canvas, orient = "vertical", 
      command = self.canvas.yview) 
     mail_scroll.pack(side = RIGHT, fill = Y) 

     self.canvas.config(yscrollcommand = mail_scroll.set) 

     self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure) 


    def OnFrameConfigure(self, event): 
     self.canvas.configure(scrollregion=self.canvas.bbox("all")) 

मैं भी तो आप देख सकते हैं कि मैं कम से हो रही है रंग का फ्रेम के साथ एक छवि प्रदान की है।

धन्यवाद

उत्तर

9

एक कैनवास <Configure> घटना पर बाध्यकारी सेट है, जो आग जब भी कैनवास आकार बदलता है: गुलाबी क्षेत्र (आप दाईं ओर स्क्रॉलबार देख सकते हैं) कैनवास कि mailbox_frame द्वारा भरने की जरूरत है । ईवेंट ऑब्जेक्ट से आप कैनवास चौड़ाई और ऊंचाई प्राप्त कर सकते हैं, और फ्रेम का आकार बदलने के लिए इसका उपयोग कर सकते हैं।

7
बस मामले में किसी और भविष्य में संदर्भ के

पता करने की जरूरत है:

 frame = Frame(self.bottom_frame) 
     frame.pack(side = LEFT, fill = BOTH, expand = True, padx = 10, pady = 10) 

     self.canvas = Canvas(frame, bg = 'pink') 
     self.canvas.pack(side = RIGHT, fill = BOTH, expand = True) 

     self.mailbox_frame = Frame(self.canvas, bg = 'purple') 

     self.canvas_frame = self.canvas.create_window((0,0), 
      window=self.mailbox_frame, anchor = NW) 
     #self.mailbox_frame.pack(side = LEFT, fill = BOTH, expand = True) 

     mail_scroll = Scrollbar(self.canvas, orient = "vertical", 
      command = self.canvas.yview) 
     mail_scroll.pack(side = RIGHT, fill = Y) 

     self.canvas.config(yscrollcommand = mail_scroll.set) 

     self.mailbox_frame.bind("<Configure>", self.OnFrameConfigure) 
     self.canvas.bind('<Configure>', self.FrameWidth) 

    def FrameWidth(self, event): 
     canvas_width = event.width 
     self.canvas.itemconfig(self.canvas_frame, width = canvas_width) 

    def OnFrameConfigure(self, event): 
     self.canvas.configure(scrollregion=self.canvas.bbox("all")) 
संबंधित मुद्दे