2009-02-07 10 views
5

मैं wxPython का उपयोग कर एक 3 फलक की विंडो लेआउट करने के लिए एक आसान तरीका खोजने की कोशिश कर रहा हूँ।मैं wxPython का उपयोग कर एक 3 फलक की विंडो कैसे लेआउट करते हैं?

मैं बाएं फलक में एक पेड़ सूची रखना चाहता हूं, उसके बाद एक दाएं फलक है जो दो में विभाजित है - शीर्ष भाग में एक संपादन घटक और नीचे के हिस्से में एक ग्रिड घटक के साथ। की तर्ज पर

कुछ:

 
-------------------------------------- 
|    |      | 
|    |  Edit   | 
| Tree  |  Control  | 
| Control |      | 
|    |----------------------| 
|    |      | 
|    |  Grid   | 
|    |      | 
-------------------------------------- 

मैं खिड़की चाहते हैं फिर से बड़े आकार का हो सकता है और उपयोगकर्ता को खींच कर खिड़कियों के भीतर घटकों में से प्रत्येक के (सापेक्ष) आकार बदलने की क्षमता दे सीमाएं

मैं समझ है कि मैं sizers और/या विभाजक खिड़की घटकों के कुछ संयोजन की जरूरत है लेकिन दस्तावेज में या वेब पर खिड़की के इस तरह के एक सभ्य उदाहरण नहीं मिल सकता है।

उत्तर

7

सबसे पहले डाउनलोड wxGlade wxPython के लिए एक gui builder (वैकल्पिक XRCed, मैं wxGlade prefere)।

फिर आपको यह तय करना होगा कि क्या आप GridSizer या Splitter का उपयोग करना चाहते हैं और आप कर चुके हैं। नीचे आप दोनों पाते हैं (वृक्ष और दाएं तरफ के बीच एक ग्रिडसाइज़र है -> स्वचालित रूप से आकार बदलता है)। संपादन और GridCtrl के बीच एक साइज़र (मैन्युअल आकार बदलें) है।

सम्मान। कोड की एक पंक्ति में प्रवेश के बिना

एक मिनट का काम:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
# generated by wxGlade 0.6.3 on Sat Feb 07 10:02:31 2009 

import wx 
import wx.grid 

# begin wxGlade: extracode 
# end wxGlade 



class MyDialog(wx.Dialog): 
    def __init__(self, *args, **kwds): 
     # begin wxGlade: MyDialog.__init__ 
     kwds["style"] = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER|wx.THICK_FRAME 
     wx.Dialog.__init__(self, *args, **kwds) 
     self.window_1 = wx.SplitterWindow(self, -1, style=wx.SP_3D|wx.SP_BORDER) 
     self.tree_ctrl_1 = wx.TreeCtrl(self, -1, style=wx.TR_HAS_BUTTONS|wx.TR_LINES_AT_ROOT|wx.TR_DEFAULT_STYLE|wx.SUNKEN_BORDER) 
     self.text_ctrl_1 = wx.TextCtrl(self.window_1, -1, "This is the Edit", style=wx.TE_MULTILINE) 
     self.grid_1 = wx.grid.Grid(self.window_1, -1, size=(1, 1)) 

     self.__set_properties() 
     self.__do_layout() 
     # end wxGlade 

    def __set_properties(self): 
     # begin wxGlade: MyDialog.__set_properties 
     self.SetTitle("dialog_1") 
     self.grid_1.CreateGrid(10, 3) 
     # end wxGlade 

    def __do_layout(self): 
     # begin wxGlade: MyDialog.__do_layout 
     grid_sizer_1 = wx.FlexGridSizer(1, 2, 3, 3) 
     grid_sizer_1.Add(self.tree_ctrl_1, 1, wx.EXPAND, 0) 
     self.window_1.SplitHorizontally(self.text_ctrl_1, self.grid_1) 
     grid_sizer_1.Add(self.window_1, 1, wx.EXPAND, 0) 
     self.SetSizer(grid_sizer_1) 
     grid_sizer_1.Fit(self) 
     grid_sizer_1.AddGrowableRow(0) 
     grid_sizer_1.AddGrowableCol(0) 
     grid_sizer_1.AddGrowableCol(1) 
     self.Layout() 
     # end wxGlade 

# end of class MyDialog 


class MyApp(wx.App): 
    def OnInit(self): 
     wx.InitAllImageHandlers() 
     mainDlg = MyDialog(None, -1, "") 
     self.SetTopWindow(mainDlg) 
     mainDlg.Show() 
     return 1 

# end of class MyApp 

if __name__ == "__main__": 
    app = MyApp(0) 
    app.MainLoop() 
+0

धन्यवाद, कि मैं के लिए क्या देख रहा था। इसके विपरीत होने के लिए मैंने एक्सआरसीड का उपयोग करके लेआउट (कुछ हद तक) दोहराया और मेरे आवेदन में इसका उपयोग कर रहा हूं। – andy47

+2

न तो WxGlade और न ही XRCed को एक व्यावहारिक समाधान बनाने की आवश्यकता है। 'Aui' के लिए –

3

आप wxSplitter, here's एक उदाहरण का उपयोग करना चाहिए। एक और here। और another

2

आप wx.aui उन्नत यूजर इंटरफेस मॉड्यूल के उपयोग पर विचार कर सकता है के रूप में यह आप बहुत आसानी से इस तरह UI के निर्माण करने के लिए अनुमति देता है। इसके अलावा उपयोगकर्ता पैन को कम से कम देख सकते हैं, अधिकतम कर सकते हैं, और खींच सकते हैं, या नहीं। यह बहुत लचीला है। मुझे वास्तव में ग्रिड और स्प्लिटर के बजाए, यूई टूलकिट के साथ इस प्रकार के यूआई को रखना आसान लगता है। इसके अलावा सभी फैंसी बटन ऐप्स को कूलर लगते हैं। :)

आधिकारिक क़ौम में एक अच्छा उदाहरण, AUI_DockingWindowMgr कहा जाता है।

7

यह एक बहुत ही सरल wx.aui और तीन पैनलों का उपयोग कर लेआउट है। मुझे लगता है कि आप आसानी से अपनी आवश्यकताओं के अनुरूप इसे अनुकूलित कर सकते हैं।

Orjanp ...

import wx 
import wx.aui 

class MyFrame(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     self.mgr = wx.aui.AuiManager(self) 

     leftpanel = wx.Panel(self, -1, size = (200, 150)) 
     rightpanel = wx.Panel(self, -1, size = (200, 150)) 
     bottompanel = wx.Panel(self, -1, size = (200, 150)) 

     self.mgr.AddPane(leftpanel, wx.aui.AuiPaneInfo().Bottom()) 
     self.mgr.AddPane(rightpanel, wx.aui.AuiPaneInfo().Left().Layer(1)) 
     self.mgr.AddPane(bottompanel, wx.aui.AuiPaneInfo().Center().Layer(2)) 

     self.mgr.Update() 


class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, '07_wxaui.py') 
     frame.Show() 
     self.SetTopWindow(frame) 
     return 1 

if __name__ == "__main__": 
    app = MyApp(0) 
    app.MainLoop() 
+0

+1, यह आसानी से एक कार्यात्मक आईडीई-जैसे लेआउट बनाता है – Kos

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