簡體   English   中英

默認情況下,wxPython小部件的間距不正確

[英]wxPython widgets are spaced incorrectly by default

我在wxPython中間距小部件時遇到問題。

在下面的代碼中,默認情況下壓縮了Vbox2和Vbox3中的按鈕,我不明白為什么。 我認為BoxSizer在默認情況下應該擴展以適合其所有內容。

我的問題是:為了防止按鈕擁擠,我需要更改什么?

這是運行我的示例的完整代碼:

import wx
import sys


class GridFrame(wx.Frame):

    def __init__(self, frame_name="grid frame",
                 panel_name="grid panel", parent=None):
        title = 'Edit {} data'.format(panel_name)
        super(GridFrame, self).__init__(parent=parent, id=wx.ID_ANY,
                                        name=frame_name, title=title)
        self.remove_cols_mode = False
        self.panel = wx.Panel(self, name=panel_name)#, size=wx.GetDisplaySize())
        self.grid_type = str(panel_name)
        self.InitUI()


    ## Initialization functions
    def InitUI(self):
        """
        initialize window
        """
        self.main_sizer = wx.BoxSizer(wx.VERTICAL)
        set1, set2, set3 = [], [], []
        ## btns set 1
        for btn_name in ['btn1', 'btn1a']:
            btn = wx.Button(self.panel, label=btn_name, name=btn_name)
            set1.append((btn))
        ## Btns set 2
        for btn_name in ['btn2', 'btn3', 'btn4']:
            btn = wx.Button(self.panel, label=btn_name, name=btn_name)
            set2.append((btn))
        ## btns set 3
        for btn_name in ['btn5', 'btn6', 'btn7']:
            btn = wx.Button(self.panel, label=btn_name, name=btn_name)
            set3.append((btn))

        ## Add content to sizers
        self.hbox = wx.BoxSizer(wx.HORIZONTAL)
        vbox1 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox1'), wx.VERTICAL)
        vbox2 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox2'), wx.VERTICAL)
        vbox3 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox3'), wx.VERTICAL)
        for btn in set1:
            vbox1.Add(btn, flag=wx.ALL, border=5)
        for btn in set2:
            vbox2.Add(btn, flag=wx.ALL, border=5)
        for btn in set3:
            vbox3.Add(btn, flag=wx.ALL, border=5)
        self.hbox.Add(vbox1, flag=wx.ALL, border=5)
        self.hbox.Add(vbox2, flag=wx.ALL, border=5)
        self.hbox.Add(vbox3, flag=wx.ALL, border=5)

        # final layout, set size
        self.main_sizer.Add(self.hbox, flag=wx.ALL|wx.ALIGN_CENTER|wx.SHAPED, border=20)
        self.main_sizer.AddSpacer(20)
        self.panel.SetSizer(self.main_sizer)
        self.panel_sizer = wx.BoxSizer(wx.VERTICAL)
        self.panel_sizer.Add(self.panel, 1)
        self.SetSizer(self.panel_sizer)
        self.panel_sizer.Fit(self)
        self.Centre()
        self.Show()


if __name__ == "__main__":
    app = wx.App()
    frame = GridFrame()
    if '-i' in sys.argv:
        import wx.lib.inspection
        wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()

將hbox添加到主sizer時,刪除wx.SHAPED標志。 這將允許hbox的形狀(縱橫比)發生變化,以匹配其內容所需的內容。 在典型布局中,很少需要使用wx.SHAPED

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM