1

我想使用 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()
4

1 回答 1

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 )

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

于 2012-11-17T08:02:33.593 回答