1

wxpython を使用して 3 つのwxTextCtrlsウィジェットを持つ GUI を実装したいのですが、ウィンドウのサイズを変更するときにそれらを同じサイズに保ちたいと考えています。

これらに何もしなければwxTextCtrls、うまくいきます。しかし、最初のウィジェットのように、これら 3 つのウィジェットの 1 つに多くの行のコンテンツを追加すると、ウィンドウのサイズを変更すると、他のウィジェットよりもサイズが大きくなります。これらのウィジェットを同じサイズに保つにはどうすればよいですか? ありがとう!

(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は、アイテムのサイズを一方向に等しくすることもできますが、他の方向に等しく(「柔軟に」)することはできません。サイザーが一方向にのみ柔軟である場合(これはSetFlexibleDirectionを使用して変更できます)、使用可能なスペースを埋めるために、サイザーが他の(「柔軟性のない」)方向にどのように成長するかを決定する必要があります。SetNonFlexibleGrowModeメソッドはこの目的を果たします。(from:docs.wxwidgets.org

だから変更:

fgs.SetFlexibleDirection( wx.BOTH )

の中へ:

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

ここで私が見る唯一の問題は、sの最大の最小サイズがTextCtrlすべてのTextCtrlsに適用されることです。

于 2012-11-17T08:02:33.593 に答える