首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用boxsizers的wxPython布局

使用boxsizers的wxPython布局
EN

Stack Overflow用户
提问于 2016-07-25 17:55:28
回答 1查看 71关注 0票数 0

我最近开始使用wxPython构建图形用户界面,并尝试创建以下布局:

代码语言:javascript
复制
Button1 Button2 Button3
----------------------------------------
listbox | textctrl

按钮应该具有灵活的宽度,扩展以在它们之间的边框中填充整个框架的宽度(每个按钮都有一个宽度(包括1/3帧的边框)。其高度应设置为以像素为单位的高度。

列表框应垂直填充框架,并设置x像素的宽度。

textctrol应该是一个文本框,它可以垂直和水平地扩展以填充框架的宽度。

这是我的代码:

代码语言:javascript
复制
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)

出问题了,因为我看到的不是我想看到的,有谁能帮我吗?

EN

回答 1

Stack Overflow用户

发布于 2016-07-26 17:08:50

我用的是win64,Python32位2.7.3.3,wx '2.8.12.1 (msw-unicode)‘。完整的工作测试示例如下:

代码语言:javascript
复制
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()

注意添加了main sizer的Fit(),以及添加到列表框的5px边框。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38564654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档