使用boxsizers的wxPython布局

2024-09-28 22:31:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始使用wxPython构建GUI,并尝试创建以下布局:

Button1 Button2 Button3
----------------------------------------
listbox | textctrl

按钮应具有灵活的宽度,扩展以填充框架的整个宽度,并在它们之间添加边框(每个按钮的宽度(包括边框)为框架的1/3)。它们的高度应设置为以像素为单位的高度。你知道吗

列表框应该垂直填充帧,并且具有x像素的设置宽度

textcrol应该是一个文本框,它可以在垂直和水平方向上扩展以填充框架的宽度。你知道吗

这是我的代码:

mainPanel = wx.Panel(self, -1)
parentBox = wx.BoxSizer(wx.VERTICAL)

menubar = wx.MenuBar()
filem = wx.Menu()

menubar.Append(filem, '&File')
self.SetMenuBar(menubar)

navPanel = wx.Panel(mainPanel, -1, size=(1000, 80))
navBox = wx.BoxSizer(wx.HORIZONTAL)

newSection = wx.Button(navPanel, self.ID_NEW, 'New')
renSection = wx.Button(navPanel, self.ID_RENAME, 'Rename')
dltSection = wx.Button(navPanel, self.ID_DELETE, 'Delete')

navBox.Add(newSection, 1, wx.EXPAND | wx.ALL, 5)
navBox.Add(renSection, 1, wx.EXPAND | wx.ALL, 5)
navBox.Add(dltSection, 1, wx.EXPAND | wx.ALL, 5)          

navPanel.SetSizer(navBox)

contentPanel = wx.Panel(mainPanel, -1, size=(1000, 600))
contentBox = wx.BoxSizer(wx.HORIZONTAL)

self.listbox = wx.ListBox(contentPanel, -1, size=(300, 700))
self.settings = wx.TextCtrl(contentPanel, -1)

contentBox.Add(self.listbox, 0)
contentBox.Add(self.settings, 1, wx.EXPAND | wx.ALL, 5)

contentPanel.SetSizer(contentBox)

parentBox.Add(navPanel, 0, wx.EXPAND | wx.ALL, 5)
parentBox.Add(contentPanel, 1, wx.EXPAND | wx.ALL, 5)

mainPanel.SetSizer(parentBox)

出了点问题,因为我看到的不是我期望看到的,有人能帮我吗?你知道吗


Tags: self框架add宽度allexpandwxpanel
1条回答
网友
1楼 · 发布于 2024-09-28 22:31:29

它为我工作,我在win64,python 32位2.7.3.3,wx'2.8.12.1(msw unicode)'。完整的工作测试示例为:

import wx

class testframe(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, -1, 'some title')
        mainPanel = wx.Panel(self, -1)
        parentBox = wx.BoxSizer(wx.VERTICAL)

        menubar = wx.MenuBar()
        filem = wx.Menu()

        menubar.Append(filem, '&File')
        self.SetMenuBar(menubar)

        navPanel = wx.Panel(mainPanel, -1, size=(1000, 80))
        navBox = wx.BoxSizer(wx.HORIZONTAL)

        newSection = wx.Button(navPanel, -1, 'New')
        renSection = wx.Button(navPanel, -1, 'Rename')
        dltSection = wx.Button(navPanel, -1, 'Delete')

        navBox.Add(newSection, 1, wx.EXPAND | wx.ALL, 5)
        navBox.Add(renSection, 1, wx.EXPAND | wx.ALL, 5)
        navBox.Add(dltSection, 1, wx.EXPAND | wx.ALL, 5)          

        navPanel.SetSizer(navBox)

        contentPanel = wx.Panel(mainPanel, -1, size=(1000, 600))
        contentBox = wx.BoxSizer(wx.HORIZONTAL)

        self.listbox = wx.ListBox(contentPanel, -1, size=(300, 700))
        self.settings = wx.TextCtrl(contentPanel, -1)

        contentBox.Add(self.listbox, 0, wx.ALL, 5)
        contentBox.Add(self.settings, 1, wx.EXPAND | wx.ALL, 5)

        contentPanel.SetSizer(contentBox)

        parentBox.Add(navPanel, 0, wx.EXPAND | wx.ALL, 5)
        parentBox.Add(contentPanel, 1, wx.EXPAND | wx.ALL, 5)

        mainPanel.SetSizer(parentBox)
        parentBox.Fit(self)

app = wx.PySimpleApp()
app.frame = testframe()
app.frame.Show()
app.MainLoop()

请注意,添加了Fit()的主sizer,以及添加到listbox的5px border。你知道吗

相关问题 更多 >