0

フレームがコンテンツに自動的にフィットするように GUI をセットアップしようとしています。

これは通常のことですか、それについて私にできることはありますか?

これが私のコードです:

    panel = wx.Panel(self)

    mainSizer = wx.BoxSizer(wx.VERTICAL)

    usernameSizer = wx.BoxSizer(wx.HORIZONTAL)
    self.usernameBox = wx.TextCtrl(panel, size=(200,35))
    usernameText = wx.StaticText(panel, label="\tUsername")
    usernameSizer.Add(self.usernameBox, 1)
    usernameSizer.Add(usernameText, 1)

    passwordSizer = wx.BoxSizer(wx.HORIZONTAL)
    self.passwordBox = wx.TextCtrl(panel, size=(200,35))
    passwordText = wx.StaticText(panel, label="\tPassword")
    passwordSizer.Add(self.passwordBox, 1)
    passwordSizer.Add(passwordText, 1)  

    urlSizer = wx.BoxSizer(wx.HORIZONTAL)
    self.urlBox = wx.TextCtrl(panel, size=(200,35))
    urlText = wx.StaticText(panel, label='\tFirst chapter URL')
    urlSizer.Add(self.urlBox, 1)
    urlSizer.Add(urlText, 1)

    formatSizer = wx.BoxSizer(wx.HORIZONTAL)
    self.formatBox = wx.ComboBox(panel, value='', choices=self.fileFormat, style=wx.CB_READONLY, name="combo", size=(200,35))
    formatText = wx.StaticText(panel, label="\tFile format")
    formatSizer.Add(self.formatBox, 1)
    formatSizer.Add(formatText, 1)


    downSizer = wx.BoxSizer(wx.HORIZONTAL)
    downButton = wx.Button(panel, label='Download', size=(161,50))
    font = wx.Font(20, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
    downButton.SetFont(font)
    downSizer.Add(downButton, 0, wx.LEFT | wx.TOP, 20)

    mainSizer.Add(usernameSizer, 0, wx.LEFT | wx.TOP, 20)
    mainSizer.Add(passwordSizer, 0, wx.LEFT | wx.TOP, 20)
    mainSizer.Add(urlSizer, 0, wx.LEFT | wx.TOP, 20)
    mainSizer.Add(formatSizer, 0, wx.LEFT | wx.TOP, 20)
    mainSizer.Add(downSizer, 0, wx.ALIGN_CENTER | wx.BOTTOM, 20)

    panel.SetSizer(mainSizer)

    panel.Fit()

    self.Show(True)

これにより、すべてのウィジェットが上部にまとめられます。これはほとんど私が望むものですが、その下には多くの空きスペースがありますが、これは望ましくありません。

sizer を mainSizer に追加するときにプロポーショナル値を 0 ではなく 1 に設定すると、フレーム全体が占有されます。フレームをコンテンツに合わせて縮小するにはどうすればよいですか?

4

1 に答える 1

1

これを達成したい場合は、に何かを追加するたびに比率を 0 に設定する必要があると思いますwxSizer

また、タグを追加することも役立つ場合があるため、次のwx.EXPANDようになります。

sizer.Add(other_panel, 0, wx.EXPAND | wx.WATERVER, border_size)

理論的には、それを行った後、パネルはそのコンポーネントのサイズを取る必要があります。また、パネルを所有するウィンドウ/ダイアログで Fit を呼び出すようにしてください。場合によっては (まれですが) Layout、sizer で関数を呼び出すと役立つことがあります。

于 2013-09-23T06:39:13.293 に答える