我想使用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()
答案 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
。