<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # wxPython 中的布局管理 > 原文: [http://zetcode.com/wxpython/layout/](http://zetcode.com/wxpython/layout/) 典型的應用由各種小部件組成。 這些小部件放置在容器小部件內。 程序員必須管理應用的布局。 這不是一件容易的事。 在 wxPython 中,可以使用絕對定位或使用大小調整器來布局小部件。 ## 絕對定位 程序員以像素為單位指定每個小部件的位置和大小。 絕對定位有幾個缺點: * 如果我們調整窗口大小,則小部件的大小和位置不會改變。 * 在各種平臺上,應用看起來都不同。 * 在應用中更改字體可能會破壞布局。 * 如果決定更改布局,則必須完全重做布局,這既繁瑣又耗時。 在某些情況下,我們可能會使用絕對定位。 例如,小的測試示例。 但是大多數情況下,在現實世界的程序中,程序員使用大小調整器。 在我們的示例中,我們有一個簡單的文本編輯器框架。 如果我們調整窗口大小,則`wx.TextCtrl`的大小不會像我們期望的那樣改變。 `absolute.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example, we lay out widgets using absolute positioning. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title, size=(350, 300)) self.InitUI() self.Centre() def InitUI(self): self.panel = wx.Panel(self) self.panel.SetBackgroundColour("gray") self.LoadImages() self.mincol.SetPosition((20, 20)) self.bardejov.SetPosition((40, 160)) self.rotunda.SetPosition((170, 50)) def LoadImages(self): self.mincol = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.Bitmap("mincol.jpg", wx.BITMAP_TYPE_ANY)) self.bardejov = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.Bitmap("bardejov.jpg", wx.BITMAP_TYPE_ANY)) self.rotunda = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.Bitmap("rotunda.jpg", wx.BITMAP_TYPE_ANY)) def main(): app = wx.App() ex = Example(None, title='Absolute positioning') ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 在上面的示例中,我們使用絕對坐標定位了三個圖像。 ```py self.mincol.SetPosition((20, 20)) ``` 使用`SetPosition()`方法,我們將圖像放置在`x = 20`,`y = 20`坐標處。 ![absolute positioning 1](https://img.kancloud.cn/64/f5/64f561ba7b8419e666eb178adbb4f135_350x300.jpg) 圖:絕對定位 ## 使用大小調整器 大小調整器確實解決了絕對定位中提到的所有這些問題。 wxPython 具有以下大小調整器: * `wx.BoxSizer` * `wx.StaticBoxSizer` * `wx.GridSizer` * `wx.FlexGridSizer` * `wx.GridBagSizer` ## `wx.BoxSizer` `wx.BoxSizer`使我們可以將幾個小部件放在一行或一列中。 我們可以將另一個調整器放到現有的調整器中。 這樣,我們可以創建非常復雜的布局。 ```py box = wx.BoxSizer(integer orient) box.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0) ``` 方向可以是`wx.VERTICAL`或`wx.HORIZONTAL`。 通過`Add()`方法將小部件添加到`wx.BoxSizer`中。 為了理解它,我們需要查看它的參數。 比例參數定義小部件在定義的方向上如何變化的比例。 假設我們有三個比例分別為 0、1 和 2 的按鈕。它們被添加到水平`wx.BoxSizer`中。 比例為 0 的按鈕完全不會改變。 在水平方向上比例為 2 的按鈕的變化比比例為 1 的按鈕大兩倍。 使用`flag`參數,您可以進一步在`wx.BoxSizer`中配置小部件的行為。 我們可以控制小部件之間的邊界。 我們在小部件之間添加一些像素間距。 為了應用邊框,我們需要定義要使用邊框的邊。 我們可以將它們與`|`運算符結合使用; 例如`wx.LEFT | wx.BOTTOM`。 我們可以在這些標志之間進行選擇: * `wx.LEFT` * `wx.RIGHT` * `wx.TOP` * `wx.BOTTOM` * `wx.ALL` 通過`setSizer()`方法將大小調整器設置為面板小部件。 `border.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example we place a panel inside another panel. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() def InitUI(self): panel = wx.Panel(self) panel.SetBackgroundColour('#4f5049') vbox = wx.BoxSizer(wx.VERTICAL) midPan = wx.Panel(panel) midPan.SetBackgroundColour('#ededed') vbox.Add(midPan, wx.ID_ANY, wx.EXPAND | wx.ALL, 20) panel.SetSizer(vbox) def main(): app = wx.App() ex = Example(None, title='Border') ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 在上面的示例中,我們在面板周圍放置了一些空間。 ```py vbox.Add(midPan, wx.ID_ANY, wx.EXPAND | wx.ALL, 20) ``` 在`border.py`中,我們在`midPan`面板周圍放置了 20 像素邊框。 `wx.ALL`將邊框大小應用于所有四個側面。 如果我們使用`wx.EXPAND`標志,則我們的窗口小部件將使用分配給它的所有空間。 最后,我們還可以定義小部件的對齊方式。 我們使用以下標志來實現: * `wx.ALIGN_LEFT` * `wx.ALIGN_RIGHT` * `wx.ALIGN_TOP` * `wx.ALIGN_BOTTOM` * `wx.ALIGN_CENTER_VERTICAL` * `wx.ALIGN_CENTER_HORIZONTAL` * `wx.ALIGN_CENTER` ![Border around a panel](https://img.kancloud.cn/d8/8b/d88bdc76558666c0a14b2c6e5b620fa9_350x250.jpg) 圖:面板周圍的邊框 ## `GoToClass`示例 在下面的示例中,我們介紹了幾個重要的想法。 `goto_class.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example we create a Go To class layout with wx.BoxSizer. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() def InitUI(self): panel = wx.Panel(self) font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT) font.SetPointSize(9) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) st1 = wx.StaticText(panel, label='Class Name') st1.SetFont(font) hbox1.Add(st1, flag=wx.RIGHT, border=8) tc = wx.TextCtrl(panel) hbox1.Add(tc, proportion=1) vbox.Add(hbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) vbox.Add((-1, 10)) hbox2 = wx.BoxSizer(wx.HORIZONTAL) st2 = wx.StaticText(panel, label='Matching Classes') st2.SetFont(font) hbox2.Add(st2) vbox.Add(hbox2, flag=wx.LEFT | wx.TOP, border=10) vbox.Add((-1, 10)) hbox3 = wx.BoxSizer(wx.HORIZONTAL) tc2 = wx.TextCtrl(panel, style=wx.TE_MULTILINE) hbox3.Add(tc2, proportion=1, flag=wx.EXPAND) vbox.Add(hbox3, proportion=1, flag=wx.LEFT|wx.RIGHT|wx.EXPAND, border=10) vbox.Add((-1, 25)) hbox4 = wx.BoxSizer(wx.HORIZONTAL) cb1 = wx.CheckBox(panel, label='Case Sensitive') cb1.SetFont(font) hbox4.Add(cb1) cb2 = wx.CheckBox(panel, label='Nested Classes') cb2.SetFont(font) hbox4.Add(cb2, flag=wx.LEFT, border=10) cb3 = wx.CheckBox(panel, label='Non-Project classes') cb3.SetFont(font) hbox4.Add(cb3, flag=wx.LEFT, border=10) vbox.Add(hbox4, flag=wx.LEFT, border=10) vbox.Add((-1, 25)) hbox5 = wx.BoxSizer(wx.HORIZONTAL) btn1 = wx.Button(panel, label='Ok', size=(70, 30)) hbox5.Add(btn1) btn2 = wx.Button(panel, label='Close', size=(70, 30)) hbox5.Add(btn2, flag=wx.LEFT|wx.BOTTOM, border=5) vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT, border=10) panel.SetSizer(vbox) def main(): app = wx.App() ex = Example(None, title='Go To Class') ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 布局僵硬。 我們創建一個垂直大小調整器。 然后,我們將五個水平大小調整器放入其中。 ```py font = wx.SystemSettings.GetFont(wx.SYS_SYSTEM_FONT) font.SetPointSize(9) ``` 我們將字體大小更改為 9 像素。 ```py vbox.Add(hbox3, proportion=1, flag=wx.LEFT|wx.RIGHT|wx.EXPAND, border=10) vbox.Add((-1, 25)) ``` 我們已經知道可以通過組合`flag`參數和`border`參數來控制小部件之間的距離。 但是有一個真正的約束。 在`Add()`方法中,我們只能為所有給定的邊指定一個邊框。 在我們的示例中,我們在右側和左側分別設置了 10 像素。 但是我們不能給底部 25 像素。 我們可以做的是在底部給 10px,如果省略`wx.BOTTOM`則給 0px。 因此,如果我們需要不同的值,則可以添加一些額外的空間。 使用`Add()`方法,我們也可以插入小部件和空間。 ```py vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT, border=10) ``` 我們將兩個按鈕放在窗口的右側。 實現這一點很重要的三件事:比例,對齊標志和`wx.EXPAND`標志。 比例必須為零。 調整窗口大小時,按鈕的大小不應更改。 我們一定不要指定`wx.EXPAND`標志。 這些按鈕僅占用分配給它們的區域。 最后,我們必須指定`wx.ALIGN_RIGHT`標志。 水平大小調整器從窗口的左側擴展到右側。 因此,如果我們指定`wx.ALIGN_RIGHT`標志,則按鈕將放置在右側。 ![GoToClass window](https://img.kancloud.cn/54/b0/54b034e557e5d38f9fc71bb4c6097f05_390x350.jpg) 圖:`GoToClass`窗口 ## `wx.GridSizer` `wx.GridSizer`在二維表中布置小部件。 表格中的每個單元格都具有相同的大小。 ```py wx.GridSizer(int rows=1, int cols=0, int vgap=0, int hgap=0) ``` 在構造器中,我們指定表中的行和列數以及單元格之間的垂直和水平空間。 在我們的示例中,我們創建了計算器的骨架。 `calculator.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example we create a layout of a calculator with wx.GridSizer. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() def InitUI(self): menubar = wx.MenuBar() fileMenu = wx.Menu() menubar.Append(fileMenu, '&File') self.SetMenuBar(menubar) vbox = wx.BoxSizer(wx.VERTICAL) self.display = wx.TextCtrl(self, style=wx.TE_RIGHT) vbox.Add(self.display, flag=wx.EXPAND|wx.TOP|wx.BOTTOM, border=4) gs = wx.GridSizer(5, 4, 5, 5) gs.AddMany( [(wx.Button(self, label='Cls'), 0, wx.EXPAND), (wx.Button(self, label='Bck'), 0, wx.EXPAND), (wx.StaticText(self), wx.EXPAND), (wx.Button(self, label='Close'), 0, wx.EXPAND), (wx.Button(self, label='7'), 0, wx.EXPAND), (wx.Button(self, label='8'), 0, wx.EXPAND), (wx.Button(self, label='9'), 0, wx.EXPAND), (wx.Button(self, label='/'), 0, wx.EXPAND), (wx.Button(self, label='4'), 0, wx.EXPAND), (wx.Button(self, label='5'), 0, wx.EXPAND), (wx.Button(self, label='6'), 0, wx.EXPAND), (wx.Button(self, label='*'), 0, wx.EXPAND), (wx.Button(self, label='1'), 0, wx.EXPAND), (wx.Button(self, label='2'), 0, wx.EXPAND), (wx.Button(self, label='3'), 0, wx.EXPAND), (wx.Button(self, label='-'), 0, wx.EXPAND), (wx.Button(self, label='0'), 0, wx.EXPAND), (wx.Button(self, label='.'), 0, wx.EXPAND), (wx.Button(self, label='='), 0, wx.EXPAND), (wx.Button(self, label='+'), 0, wx.EXPAND) ]) vbox.Add(gs, proportion=1, flag=wx.EXPAND) self.SetSizer(vbox) def main(): app = wx.App() ex = Example(None, title='Calculator') ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 注意我們如何設法在返回和關閉按鈕之間放置一個空格。 我們只需在其中放置一個空的`wx.StaticText`。 在我們的示例中,我們使用了`AddMany()`方法。 這是一次同時添加多個小部件的便捷方法。 ```py gs.AddMany( [(wx.Button(self, label='Cls'), 0, wx.EXPAND), ... ``` 將小部件按順序放置在表中,然后將它們添加。 第一行先填充,然后第二行等。 ![Calculator](https://img.kancloud.cn/58/7e/587e158b3e01507696e8cabb1d5a09e6_371x290.jpg) 圖:計算器 ## `wx.FlexGridSizer` 該大小調整器類似于`wx.GridSizer`。 它還確實將其小部件布置在二維表中。 它增加了一些靈活性。 `wx.GridSizer`細胞大小相同。 `wx.FlexGridSizer`中的所有單元格都具有相同的高度。 一列中所有單元格的寬度均相同。 但是,所有行和列不一定都具有相同的高度或寬度。 ```py wx.FlexGridSizer(int rows=1, int cols=0, int vgap=0, int hgap=0) ``` `rows`和`cols`指定大小調整器中的行數和列數。 `vgap`和`hgap`在兩個方向的小部件之間添加了一些空間。 很多時候,開發者必須開發用于數據輸入和修改的對話框。 我發現`wx.FlexGridSizer`適用于此類任務。 開發者可以使用此 sizer 輕松設置對話框窗口。 也可以使用`wx.GridSizer`完成此操作,但由于每個單元格必須具有相同的大小的限制,因此看起來不太好。 `review.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example we create review layout with wx.FlexGridSizer. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() self.Show() def InitUI(self): panel = wx.Panel(self) hbox = wx.BoxSizer(wx.HORIZONTAL) fgs = wx.FlexGridSizer(3, 2, 9, 25) title = wx.StaticText(panel, label="Title") author = wx.StaticText(panel, label="Author") review = wx.StaticText(panel, label="Review") tc1 = wx.TextCtrl(panel) tc2 = wx.TextCtrl(panel) tc3 = wx.TextCtrl(panel, style=wx.TE_MULTILINE) fgs.AddMany([(title), (tc1, 1, wx.EXPAND), (author), (tc2, 1, wx.EXPAND), (review, 1, wx.EXPAND), (tc3, 1, wx.EXPAND)]) fgs.AddGrowableRow(2, 1) fgs.AddGrowableCol(1, 1) hbox.Add(fgs, proportion=1, flag=wx.ALL|wx.EXPAND, border=15) panel.SetSizer(hbox) def main(): app = wx.App() ex = Example(None, title='Review') ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 在上面的代碼示例中,我們使用`FlexGridSizer`創建一個`Review`窗口。 ```py hbox = wx.BoxSizer(wx.HORIZONTAL) ... hbox.Add(fgs, proportion=1, flag=wx.ALL|wx.EXPAND, border=15) ``` 我們創建一個水平框大小調整器,以便在小部件表周圍放置一些空間(15 像素)。 ```py fgs.AddMany([(title), (tc1, 1, wx.EXPAND), (author), (tc2, 1, wx.EXPAND), (review, 1, wx.EXPAND), (tc3, 1, wx.EXPAND)]) ``` 我們使用`AddMany()`方法將小部件添加到大小調整器中。 `wx.FlexGridSizer`和`wx.GridSizer`都共享此方法。 ```py fgs.AddGrowableRow(2, 1) fgs.AddGrowableCol(1, 1) ``` 我們使第三行和第二列可增長。 這樣,當調整窗口大小時,我們使文本控件增加。 前兩個文本控件將在水平方向上增長,第三個文本控件將在兩個方向上增長。 我們一定不要忘記使小部件可以使用`wx.EXPAND`進行擴展以使其起作用。 ![Review](https://img.kancloud.cn/1f/11/1f11bdb16212fbcae472283c2a51067d_350x300.jpg) 圖:回顧 example ## `wx.GridBagSizer` `wx.GridBagSizer`是 wxPython 中最靈活的大小調整器。 這種大小調整器不僅僅適用于 wxPython。 我們也可以在其他工具包中找到它。 該大小調整器可以顯式定位項目。 項還可以選擇跨越多個行或一列。 `wx.GridBagSizer`具有簡單的構造器。 ```py wx.GridBagSizer(integer vgap, integer hgap) ``` 垂直和水平間隙定義了所有子級之間使用的像素間隔。 我們使用`Add()`方法將項目添加到網格中。 ```py Add(self, item, tuple pos, tuple span=wx.DefaultSpan, integer flag=0, integer border=0, userData=None) ``` `Item`是插入網格中的小部件。 pos 指定虛擬網格中的位置。 左上角的單元格的位置為(0,0)。 范圍是窗口小部件的可選范圍; 例如 (3,2)的范圍跨 3 行和 2 列跨越一個窗口小部件。 `wx.BoxSizer`前面已經討論了標志和邊界。 調整窗口大小時,網格中的項目可以更改其大小或保留默認大小。 如果我們希望您的項目增加和縮小,可以使用以下兩種方法: ```py AddGrowableRow(integer row) AddGrowableCol(integer col) ``` ## 重命名窗口示例 在第一個示例中,我們創建一個“重命名”窗口。 它將具有一個`wx.StaticText`,一個`wx.TextCtrl`和兩個`wx.Button`小部件。 `rename.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example we create a rename layout with wx.GridBagSizer. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() def InitUI(self): panel = wx.Panel(self) sizer = wx.GridBagSizer(4, 4) text = wx.StaticText(panel, label="Rename To") sizer.Add(text, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=5) tc = wx.TextCtrl(panel) sizer.Add(tc, pos=(1, 0), span=(1, 5), flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5) buttonOk = wx.Button(panel, label="Ok", size=(90, 28)) buttonClose = wx.Button(panel, label="Close", size=(90, 28)) sizer.Add(buttonOk, pos=(3, 3)) sizer.Add(buttonClose, pos=(3, 4), flag=wx.RIGHT|wx.BOTTOM, border=10) sizer.AddGrowableCol(1) sizer.AddGrowableRow(2) panel.SetSizer(sizer) def main(): app = wx.App() ex = Example(None, title='Rename') ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 我們必須將窗口視為一個大的網格表。 ```py text = wx.StaticText(panel, label="Rename To") sizer.Add(text, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=10) ``` 文本“重命名為”轉到左上角。 因此,我們指定(0,0)位置。 然后在底部,左側和底部添加一些空間。 ```py tc = wx.TextCtrl(panel) sizer.Add(tc, pos=(1, 0), span=(1, 5), flag=wx.EXPAND|wx.LEFT|wx.RIGHT, border=5) ``` `wx.TextCtrl`轉到第二行的開頭(1、0)。 請記住,我們從零開始計數。 它擴展了 1 行和 5 列(1、5)。 然后,在小部件的左側和右側放置 5 個像素的空間。 ```py sizer.Add(buttonOk, pos=(3, 3)) sizer.Add(buttonClose, pos=(3, 4), flag=wx.RIGHT|wx.BOTTOM, border=10) ``` 我們在第四行中放置了兩個按鈕。 第三行留空,以便我們在`wx.TextCtrl`和按鈕之間留出一些空間。 我們將“確定”按鈕放入第四列,將“關閉”按鈕放入第五列。 請注意,一旦我們向一個小部件應用了一些空間,它就會被應用于整行。 這就是為什么我們沒有為“確定”按鈕指定底部空間的原因。 細心的讀者可能會注意到,我們沒有在兩個按鈕之間指定任何空格。 也就是說,我們沒有在“確定”按鈕的右側或“關閉”按鈕的右側放置任何空格。 在`wx.GridBagSizer`的構造器中,我們在所有小部件之間放置了一些空間。 所以已經有一些空間了。 ```py sizer.AddGrowableCol(1) sizer.AddGrowableRow(2) ``` 我們必須做的最后一件事是使對話框可調整大小。 我們使第二列和第三行可增長。 現在我們可以擴大或縮小窗口。 嘗試注釋這兩行,然后看看會發生什么。 ![Rename](https://img.kancloud.cn/20/51/2051a7bb07c000b72308d7f85f0442e7_320x150.jpg) 圖:重命名窗口 ## 新類示例 在下一個示例中,我們創建一個窗口,可以在 JDeveloper 中找到它。 這是用于在 Java 中創建新類的窗口。 `new_class.py` ```py #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ZetCode wxPython tutorial In this example we create a new class layout with wx.GridBagSizer. author: Jan Bodnar website: www.zetcode.com last modified: April 2018 """ import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() def InitUI(self): panel = wx.Panel(self) sizer = wx.GridBagSizer(5, 5) text1 = wx.StaticText(panel, label="Java Class") sizer.Add(text1, pos=(0, 0), flag=wx.TOP|wx.LEFT|wx.BOTTOM, border=15) icon = wx.StaticBitmap(panel, bitmap=wx.Bitmap('exec.png')) sizer.Add(icon, pos=(0, 4), flag=wx.TOP|wx.RIGHT|wx.ALIGN_RIGHT, border=5) line = wx.StaticLine(panel) sizer.Add(line, pos=(1, 0), span=(1, 5), flag=wx.EXPAND|wx.BOTTOM, border=10) text2 = wx.StaticText(panel, label="Name") sizer.Add(text2, pos=(2, 0), flag=wx.LEFT, border=10) tc1 = wx.TextCtrl(panel) sizer.Add(tc1, pos=(2, 1), span=(1, 3), flag=wx.TOP|wx.EXPAND) text3 = wx.StaticText(panel, label="Package") sizer.Add(text3, pos=(3, 0), flag=wx.LEFT|wx.TOP, border=10) tc2 = wx.TextCtrl(panel) sizer.Add(tc2, pos=(3, 1), span=(1, 3), flag=wx.TOP|wx.EXPAND, border=5) button1 = wx.Button(panel, label="Browse...") sizer.Add(button1, pos=(3, 4), flag=wx.TOP|wx.RIGHT, border=5) text4 = wx.StaticText(panel, label="Extends") sizer.Add(text4, pos=(4, 0), flag=wx.TOP|wx.LEFT, border=10) combo = wx.ComboBox(panel) sizer.Add(combo, pos=(4, 1), span=(1, 3), flag=wx.TOP|wx.EXPAND, border=5) button2 = wx.Button(panel, label="Browse...") sizer.Add(button2, pos=(4, 4), flag=wx.TOP|wx.RIGHT, border=5) sb = wx.StaticBox(panel, label="Optional Attributes") boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL) boxsizer.Add(wx.CheckBox(panel, label="Public"), flag=wx.LEFT|wx.TOP, border=5) boxsizer.Add(wx.CheckBox(panel, label="Generate Default Constructor"), flag=wx.LEFT, border=5) boxsizer.Add(wx.CheckBox(panel, label="Generate Main Method"), flag=wx.LEFT|wx.BOTTOM, border=5) sizer.Add(boxsizer, pos=(5, 0), span=(1, 5), flag=wx.EXPAND|wx.TOP|wx.LEFT|wx.RIGHT , border=10) button3 = wx.Button(panel, label='Help') sizer.Add(button3, pos=(7, 0), flag=wx.LEFT, border=10) button4 = wx.Button(panel, label="Ok") sizer.Add(button4, pos=(7, 3)) button5 = wx.Button(panel, label="Cancel") sizer.Add(button5, pos=(7, 4), span=(1, 1), flag=wx.BOTTOM|wx.RIGHT, border=10) sizer.AddGrowableCol(2) panel.SetSizer(sizer) sizer.Fit(self) def main(): app = wx.App() ex = Example(None, title="Create Java Class") ex.Show() app.MainLoop() if __name__ == '__main__': main() ``` 這是一個更復雜的布局。 我們同時使用`wx.GridBagSizer`和`wx.StaticBoxsizer`。 ```py line = wx.StaticLine(panel) sizer.Add(line, pos=(1, 0), span=(1, 5), flag=wx.EXPAND|wx.BOTTOM, border=10) ``` 該行用于分隔布局中的小部件組。 ```py icon = wx.StaticBitmap(panel, bitmap=wx.Bitmap('exec.png')) sizer.Add(icon, pos=(0, 4), flag=wx.TOP|wx.RIGHT|wx.ALIGN_RIGHT, border=5) ``` 我們將`wx.StaticBitmap`放入網格的第一行。 我們將其放在行的右側。 ```py sb = wx.StaticBox(panel, label="Optional Attributes") boxsizer = wx.StaticBoxSizer(sb, wx.VERTICAL) ``` `wxStaticBoxSizer`類似于普通的`wx.BoxSizer`,但它在大小調整器周圍添加了一個靜態框。 我們將復選框放入靜態框大小調整器中。 ![New class window](https://img.kancloud.cn/43/14/4314c84f7f5d7b06fb4cf2c1671110e0_383x375.jpg) 圖:新類窗口 wxPython 教程的這一部分專門用于布局管理。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看