0

我在这里重现了错误;

import wx
import debug

class MyFrame(wx.Frame):


    def __init__(self, parent):

        wx.Frame.__init__(self, parent, -1, "Test")
        self.SetSize((600,500))

        vbox = wx.BoxSizer(wx.VERTICAL)
        toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER)
        toolbar.Realize()
        vbox.Add(toolbar, 0, border=5)

app = wx.App(0)

frame = MyFrame(None)
app.SetTopWindow(frame)
frame.Show()

app.MainLoop()

现在无论我在哪里添加此行以添加文本控件;

self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

它出现在工具栏上。我阅读了文档并遵循了一些教程,但我仍然无法完全掌握这个概念。我怎样才能实现我想要的?我希望文本控件出现在工具栏下方并适合剩余空间。

4

2 回答 2

1

如果没有看到实际的问题代码,很难确定,但我敢打赌你想要这个:

vbox.Add(self.control)

或者,如果TextCtrl没有在内部构建__init__,则进行该操作self.vbox.Add,当然还可以将vbox引用更改__init__self.vbox.

引用文档

box sizer 背后的基本思想是,窗口通常会以相当简单的基本几何图形布局,通常以一行或一列或两者的嵌套层次结构。wx.BoxSizer 将根据传递给构造函数的方向参数将其项目布置在简单的行或列中。

这正是你想要的——你想把 aTextCtrl垂直放置在 a 下方Toolbar。如果你把它们都放在同一个BoxSizer中,这将自动发生。

但是如果你TextCtrl直接把它放到a里面Frame,也把BoxSizerToolbar里面的那个放到里面一样Frame,你还没有告诉wx怎么布局里面的控件Frame

于 2013-05-16T18:17:28.853 回答
1

嗯,有几个问题

  1. 你还没有添加TextCtrl到 中BoxSizer,所以它不会被布局
  2. 你还没有为Frame

你可以做这样的事情......

def __init__(self, parent):

    wx.Frame.__init__(self, parent, -1, "Test")
    self.SetSize((600,500))

    toolbar = wx.ToolBar(self, -1, style=wx.TB_HORIZONTAL | wx.NO_BORDER)
    toolbar.Realize()

    self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

    vbox = wx.BoxSizer(wx.VERTICAL)
    vbox.Add(toolbar, 0, border=5)
    vbox.Add(self.control, 1, border=5)

    self.SetSizer(vbox)

...但是使用Frame'CreateToolBar()方法可能会更好,那么您不必担心它的布局...

def __init__(self, parent):

    wx.Frame.__init__(self, parent, -1, "Test")
    self.SetSize((600,500))

    toolbar = self.CreateToolBar(style=wx.TB_HORIZONTAL | wx.NO_BORDER)
    toolbar.Realize()

    self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)

    vbox = wx.BoxSizer(wx.VERTICAL)
    vbox.Add(self.control, 1, border=5)

    self.SetSizer(vbox)

......确实,如果这TextCtrl是框架中唯一的其他东西,你甚至不需要sizer......

def __init__(self, parent):

    wx.Frame.__init__(self, parent, -1, "Test")
    self.SetSize((600,500))

    toolbar = self.CreateToolBar(style=wx.TB_HORIZONTAL | wx.NO_BORDER)
    toolbar.Realize()

    self.control = wx.TextCtrl(self, style=wx.TE_MULTILINE)
于 2013-05-16T18:27:19.257 回答