2011-01-15 3 views
6

में तत्वों (पैनल) को रखकर मैं एक फ्रेम के भीतर दो पैनलों को रखने के लिए एक ग्रिडबैगज़र का उपयोग कर रहा हूं।एक wx.GridBagSizer

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL) 
main_panel = wx.Panel(self, id=ID_MAIN_PANEL) 

frame_sizer = wx.GridBagSizer(1, 1) 
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND) 
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND) 
frame_sizer.AddGrowableRow(0) 
frame_sizer.AddGrowableCol(0) 
self.SetSizer(frame_sizer) 

मैं control_panel main_panel ऊपर हो (जैसा कि आप ऊपर देख सकते हैं) चाहता हूँ।

alt text

मैं नहीं जानता कि क्यों शीर्ष पैनल इतना नीचे पैनल से बड़ा है, जब मैं विपरीत निर्दिष्ट किया है: हालांकि इस उत्पादन मैं हो रही है। (2, 5) शीर्ष के लिए और (5, 5) नीचे के लिए। जब मैं इसे छोटा आकार देता हूं तो यह एक अजीब व्यवहार भी करता है, यह मूल रूप से मुझे जो चाहिए (नीचे छवि देखें) देता है, लेकिन मुझे नहीं पता कि जब मैं इसे फिर से बड़ा करता हूं तो अनुपात को कैसे बनाए रखा जाए।

alt text

लेकिन जब आप बड़े आकार बदलने (यहां तक ​​कि एक छोटी राशि से) आप (नीचे) देख सकते हैं दूसरी दिशा में आकार और अनुपात परिवर्तन नाटकीय रूप से (नीचे बहुत छोटे और बहुत बड़ा शीर्ष बनने के साथ शुरू)।

alt text

अभी भी इस sizers जानने की कोशिश कर और वास्तव में उदाहरण मैंने देखा है में से किसी के साथ इस समस्या नहीं मिल रहा। सभी मानकों के साथ प्रयोग करने और कुछ परीक्षण करने का भी प्रयास किया और मैं यह नहीं समझ सकता कि यहां क्या हो रहा है। कोई भी सहायताकाफी प्रशंसनीय होगी।

संपादित करें: नीचे दी गई छवि सहायता के लिए नीचे दी गई छवि। alt text

उत्तर

2

व्यक्तिगत रूप से, मैं वर्टिकल अभिविन्यास में एक बॉक्ससाइज़र का उपयोग करूंगा। यहां एक साधारण उदाहरण दिया गया है:

import wx 

class MyForm(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial") 

     # Add a panel so it looks the correct on all platforms 
     panel = wx.Panel(self, wx.ID_ANY) 

     control_panel = wx.Panel(panel) 
     control_panel.SetBackgroundColour("Yellow") 
     main_panel = wx.Panel(panel) 
     main_panel.SetBackgroundColour("Blue") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(control_panel, 3, wx.EXPAND) 
     sizer.Add(main_panel, 1, wx.EXPAND) 
     panel.SetSizer(sizer) 

# Run the program 
if __name__ == "__main__": 
    app = wx.PySimpleApp() 
    frame = MyForm().Show() 
    app.MainLoop() 

मैंने प्रत्येक पैनल का पृष्ठभूमि रंग बदल दिया ताकि यह बताने में आसान हो सके कि कौन सा है। ध्यान दें कि मैं नियंत्रण कक्ष 3 के अनुपात के और मुख्य पैनल 1. के अनुपात के आप विजेट निरीक्षण उपकरण पर एक नज़र लेने के लिए और साथ ही आप यह कल्पना में मदद करने के लिए चाहते हो सकता दिया:

http://wiki.wxpython.org/Widget%20Inspection%20Tool

+0

क्या मैं अभी भी इसके साथ SetMaxSize का उपयोग कर सकता हूं?मैं शीर्ष पैनल को एक ही आकार में रहने के लिए चाहता हूं (वाई में, लेकिन एक्स के माध्यम से विस्तार योग्य) लेकिन नीचे पैनल (एक्स और वाई में) विस्तार करने के लिए। – johnharris85

+0

मुझे यकीन नहीं है ... आप इसे शीर्ष पैनल के लिए नेस्टेड साइज़र का उपयोग करने में सक्षम हो सकते हैं, लेकिन मुझे नहीं पता। –

1

ग्रिड में सात पंक्तियों और पांच स्तंभों में से आप केवल पहली पंक्ति निर्दिष्ट करते हैं और पहला स्तंभ बढ़ने योग्य होता है।

नियंत्रण कक्ष पहली पंक्ति पर कब्जा करता है ताकि यह उपलब्ध स्थान को ले जा सके।

wx.EXPAND ध्वज का प्रभाव केवल तभी होता है जब सेल एक बढ़ती पंक्ति या स्तंभ में हो।

+0

धन्यवाद, मैंने सभी पंक्तियों और स्तंभों के लिए बढ़ने योग्य जोड़ा है और यह बहुत बेहतर दिखता है, हालांकि मैं वास्तव में शीर्ष पैनल को एक निश्चित आकार में विस्तार करना चाहता हूं, फिर रुकें। लेकिन नीचे की खिड़की का आकार बदलने पर बड़ा हो सकता है। क्या यह संभव है? – johnharris85

+0

नियंत्रण कक्ष ऊंचाई को सीमित करने के लिए SetMaxSize का उपयोग करने का प्रयास करें। आप नियंत्रण कक्ष की ऊंचाई भी तय कर सकते हैं (सेटसाइज के साथ) और पंक्तियों को बनाने योग्य नहीं बनाते हैं। या आप इन दो पैनलों में से प्रत्येक का विस्तार करने वाली बढ़ती पंक्तियों की संख्या को बदलकर अनुपात के साथ खेल सकते हैं। –

+0

मैंने control_panel.SetMaxSize (wx.Size (150, 300) जोड़ा लेकिन ऐसा लगता है कि ऐसा कुछ भी नहीं हुआ है, मैं अभी भी इसे कहीं भी विस्तारित कर सकता हूं। इसके अतिरिक्त (और यह सभी पंक्तियों/कोल्स को बढ़ने के बाद हुआ) फ्रेम के किनारों पर दिखाई देने वाली कुछ अजीब जगह होती है जब इसे कुछ आकारों में बदल दिया जाता है (मैंने उपर्युक्त की एक अतिरिक्त छवि जोड़ दी है)। – johnharris85

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