wxpython:如何在flexgridsizer中保留三个具有相同大小的wxTextCtrls

时间:2012-11-16 07:44:24

标签: python wxpython wxwidgets

我想使用wxpython来实现一个有三个wxTextCtrls小部件的GUI,我想在更改窗口大小时让它们保持相同的大小

如果我对这些wxTextCtrls什么都不做,那就行得很好。但是当我在这三个小部件中的一个中添加许多内容时,就像第一个小部件一样,当我改变窗口的大小时,它的大小将比其他小部件大。我怎么能保持这些小部件具有相同的大小?谢谢!

(PS:我认为生成的GUI的图像可以更好地解释我的问题,但我无法发布图像。抱歉)

我的代码是

import os
import wx

class My_Gui(wx.Frame):
    def __init__(self, parent, title):
        super(My_Gui, self).__init__(parent, title = title,size=(800,600))

        self.InitUI()
        self.Centre()
        self.Show()

    def InitUI(self):

        my_panel = wx.Panel(self)

        hbox = wx.BoxSizer(wx.HORIZONTAL)

        fgs = wx.FlexGridSizer(3, 2, 25, 30)

        button1 = wx.Button(my_panel, label='button1', size=(120,150))

        button2 = wx.Button(my_panel, label='button2', size=(120,150))

        button3 = wx.Button(my_panel, label='button3', size=(120,150))


        self.tc1 = wx.TextCtrl(my_panel, style=wx.TE_MULTILINE | wx.HSCROLL)
        self.tc2 = wx.TextCtrl(my_panel, style=wx.TE_MULTILINE | wx.HSCROLL)
        self.tc3 = wx.TextCtrl(my_panel, style=wx.TE_MULTILINE | wx.HSCROLL)


        fgs.AddMany([(button1),(self.tc1, 1, wx.EXPAND),  (button2), \
                  (self.tc2, 1, wx.EXPAND), (button3), (self.tc3, 1, wx.EXPAND)])

        fgs.AddGrowableRow(2, 1)
        fgs.AddGrowableRow(1, 1)
        fgs.AddGrowableRow(0, 1)
        fgs.AddGrowableCol(1, 1)

        hbox.Add(fgs, proportion=1, flag=wx.ALL|wx.EXPAND, border=40)
        my_panel.SetSizer(hbox)


if __name__ == "__main__":
    app = wx.App()
    My_Gui(None, title='Example')
    app.MainLoop()

1 个答案:

答案 0 :(得分:1)

  

从wxWidgets 2.5.0开始,wxFlexGridSizer也可以在一个方向上同等地调整项目大小,但在另一个方向上不平等("灵活地")。如果sizer在一个方向上只是灵活的(这可以使用SetFlexibleDirection进行更改),则需要确定sizer应该如何在另一个方向上生长("非灵活")以填充可用的方向空间。 SetNonFlexibleGrowMode方法用于此目的。 (来自:docs.wxwidgets.org

所以改变:

fgs.SetFlexibleDirection( wx.BOTH )

分为:

fgs.SetFlexibleDirection( wx.HORIZONTAL )
fgs.SetNonFlexibleGrowMode( wx.FLEX_GROWMODE_ALL )

我在这里看到的唯一问题是TextCtrl的最小最小尺寸适用于所有TextCtrl