2009-08-14 7 views
10

मेरे पास विभिन्न साइज़र में कई बटन हैं और वे जिस तरीके से मैं चाहता हूं उसमें विस्तार करता हूं। हालांकि, जब मैं अभिभावक को एक नए wx.BoxSizer में जोड़ता हूं जिसका उपयोग फ्रेम में सभी तत्वों के चारों ओर एक सीमा जोड़ने के लिए किया जाता है, तो जो सॉज़र जोड़ा गया है वह सही ढंग से लंबवत रूप से कार्य करता है, लेकिन क्षैतिज रूप से नहीं।wxPython: BoxSizer में आइटम क्षैतिज रूप से विस्तारित नहीं होते हैं, केवल लंबवत

निम्नलिखित कोड समस्या को दर्शाता है:

#! /usr/bin/env python 

import wx 
import webbrowser 

class App(wx.App): 


    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 


class MainFrame(wx.Frame): 

    title = 'Title' 


    def __init__(self): 
     wx.Frame.__init__(self, None, -1, self.title) 

     panel = wx.Panel(self) 

     #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG) 
     #self.SetIcon(icon) 

     sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10) 

     button1 = wx.Button(panel, -1, 'BUTTON') 
     sizer.Add(button1, 0, wx.EXPAND) 

     buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5) 

     buttonDelete = wx.Button(panel, -1, 'Delete') 
     buttonSizer.Add(buttonDelete, 0, 0) 

     buttonEdit = wx.Button(panel, -1, 'Edit') 
     buttonSizer.Add(buttonEdit, 0, 0) 

     buttonNew = wx.Button(panel, -1, 'New') 
     buttonSizer.Add(buttonNew, 0, 0) 

     buttonSizer.AddGrowableCol(0, 0) 

     sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL) 

     sizer.AddGrowableCol(0, 0) 
     sizer.AddGrowableRow(0, 0) 

     mainSizer = wx.BoxSizer(wx.EXPAND) 
     mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10) 

     #panel.SetSizerAndFit(sizer) 
     #sizer.SetSizeHints(self) 
     panel.SetSizerAndFit(mainSizer) 
     mainSizer.SetSizeHints(self) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

लाइनों और और uncommenting लाइनों और अतिरिक्त BoxSizer दूर करता है और दिखाता है कि कैसे मैं समारोह के लिए सब कुछ उम्मीद बाहर टिप्पणी करते हुए (निश्चित रूप से सफेद जगह के बिना)।

मैं पूरी तरह से इस समस्या से फंस गया हूं और अभी भी इसे ठीक करने के तरीके के बारे में कोई संकेत नहीं है।

उत्तर

24

सबसे पहले, आप कुछ झंडे गलत तरीके से पारित कर रहे हैं। BoxSizer wx.HORIZONTAL या wx.VERTICAL लेता है, wx.EXPAND नहीं। sizer.Add wx नहीं लेता है। हॉरिज़ोनल।

यदि आपके पास वर्टिकल बॉक्ससाइज़र है, तो wx.EXPAND नियंत्रण को क्षैतिज रूप से भर देगा, जबकि 1 या उससे अधिक अनुपात (जोड़ने के लिए दूसरा तर्क) नियंत्रण को लंबवत रूप से भर देगा। यह हॉरिज़ोनल बॉक्ससाइज़र के विपरीत है।

sizer = wx.BoxSizer(wx.VERTICAL) 
sizer.Add(widget1, 0, wx.EXPAND) 
sizer.Add(widget2, 1) 

विजेट 1 क्षैतिज रूप से विस्तारित होगा। विजेट 2 लंबवत विस्तारित होगा।

यदि आप किसी अन्य साइज़र में एक साइज़र डालते हैं, तो आपको यह सुनिश्चित करने की ज़रूरत है कि इसका अनुपात और विस्तारित झंडे सेट करें ताकि इसकी अंदरूनी बढ़ेगी कि आप उन्हें कैसे चाहते हैं।

मैं बाकी को आपके पास छोड़ दूंगा।

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