3

wx.TextCtrlパネルの残りの幅全体を取得したい。awx.StaticTextと awx.Buttonを水平wx.BoxSizerに、垂直wx.BoxSizerに a wx.lib.scrolledpanel.ScrolledPanel(下にありselfます)で配置されます。

# create TextCtrl
self.fileNameInput = wx.TextCtrl (self, style=wx.TE_PROCESS_ENTER)
# create horizontal sizer with 3 items
self.fileNameSizer = wx.BoxSizer (wx.HORIZONTAL)
self.fileNameSizer.Add (wx.StaticText (self, -1, 'none'), flag=(wx.ALIGN_CENTER_VERTICAL))
self.fileNameSizer.Add (self.fileNameInput, proportion=1, flag=(wx.EXPAND | wx.ALIGN_CENTER_VERTICAL))
self.fileNameSizer.Add (wx.Button (self, label='Button'), flag=(wx.ALIGN_CENTER_VERTICAL))
# create vertical sizer
self.SetSizer (wx.BoxSizer (wx.VERTICAL))
self.GetSizer ().Add (self.fileNameSizer)

おそらくサイザーが自分の幅を見るため、大きくするのにproportionwx.EXPAND役立ちません。しかし、「TextCtrl」を可変幅にするためのスタイルやフラグが見つかりませんでした..?TextCtrlTextCtrl

アイデアをありがとう!

編集:「...」を何か機能するものに置き換えました

4

1 に答える 1

3

間違っているのは次の行だと思います。

self.GetSizer().Add(self.fileNameSizer)

ネストされたサイザーをそのマスター サイズと一致させるには、いくつかのproportion=1and/orが必要です。flag=wx.EXPAND

このようなもの:

import wx

class MainWindow(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.panel = wx.Panel(self)

        self.label = wx.StaticText(self.panel, label="Label")
        self.text = wx.TextCtrl(self.panel)
        self.button = wx.Button(self.panel, label="Test")

        self.button1 = wx.Button(self.panel, label="ABOVE")
        self.button2 = wx.Button(self.panel, label="BELLOW")

        self.horizontal = wx.BoxSizer()
        self.horizontal.Add(self.label, flag=wx.CENTER)
        self.horizontal.Add(self.text, proportion=1, flag=wx.CENTER)
        self.horizontal.Add(self.button, flag=wx.CENTER)

        self.vertical = wx.BoxSizer(wx.VERTICAL)
        self.vertical.Add(self.button1, flag=wx.EXPAND)
        self.vertical.Add(self.horizontal, proportion=1, flag=wx.EXPAND)
        self.vertical.Add(self.button2, flag=wx.EXPAND)

        self.panel.SetSizerAndFit(self.vertical)  
        self.Show()


app = wx.App(False)
win = MainWindow(None)
app.MainLoop()

(ところで:メソッド呼び出しの前にスペースを追加するのはやめてください。また、GUI オブジェクトへのアクセスが失われないように、オブジェクト指向のアプローチをお勧めします。

于 2013-12-06T09:17:19.697 に答える