1

notebookPage パネルの垂直レイアウトサイザー内に水平レイアウトのサイザーを入れ子にしようとしています。

wxPythonからインスピレーションを得まし た。

このレイアウトを取得する代わりに

トン数制限 (トン単位): [3000]
[x] 一致するカテゴリでフィルターを有効にする

すべてがパネル内の 1 行にまとめられています

これをWin7、python 2.6.6、wx 2.8.12.1で実行しています

関連するコードは次のとおりです。

import sys
import os


import wx

class MainWindow(wx.Frame):
    def __init__(self,parent,title):
        self.ID_LOAD=101
        self.ID_SAVE=102

        # based on a frame, so set up the frame
        wx.Frame.__init__(self,parent,wx.ID_ANY, title, size=(640,480))

        self.CreateStatusBar()

        self.tab = wx.Notebook(self, -1, style=(wx.NB_TOP))
        self.globPanel = wx.NotebookPage(self.tab, -1)
        self.orderPanel = wx.NotebookPage(self.tab, -1)
        self.slabsPanel = wx.NotebookPage(self.tab, -1)
        self.tab.AddPage(self.globPanel, "Global filter")
        self.tab.AddPage(self.orderPanel, "Orders filter")
        self.tab.AddPage(self.slabsPanel, "Slabs filter")

        self.toolbar = wx.ToolBar(self, wx.ID_ANY, style=wx.TB_HORIZONTAL)
        self.toolbar.SetToolBitmapSize((20,20))
        load_ico = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, (20,20))
        self.toolbar.AddLabelTool(self.ID_LOAD, "Load", load_ico, bmpDisabled=wx.NullBitmap, shortHelp='Load', longHelp="Loads a text file to the filter editor")
        save_ico = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR, (20,20))
        self.toolbar.AddLabelTool(self.ID_SAVE, "Save", save_ico, bmpDisabled=wx.NullBitmap, shortHelp='Save', longHelp="Saves the contents of the filter editor")
        self.toolbar.AddSeparator()

        self.tonnageStatic = wx.StaticText(self.globPanel, wx.ID_ANY, "Tonnage limit (in tons): ")
        self.tonnageEdit = wx.TextCtrl(self.globPanel, wx.ID_ANY, '30000') 
        self.tonnageSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.tonnageSizer.Add(self.tonnageStatic, flag=wx.EXPAND | wx.RIGHT | wx.LEFT | wx.TOP | wx.BOTTOM, border=10)
        self.tonnageSizer.Add(self.tonnageEdit, flag=wx.EXPAND | wx.RIGHT | wx.LEFT | wx.TOP | wx.BOTTOM, border=10)

        self.filterCheck = wx.CheckBox(self.globPanel, wx.ID_ANY, "Enable filter on matchings categories")

        self.globSizer = wx.BoxSizer(wx.VERTICAL)
        self.globSizer.Add(self.tonnageSizer)
        self.globSizer.Add(wx.StaticLine(self), 0, wx.EXPAND)
        self.globSizer.Add(self.filterCheck, 0, wx.EXPAND)
        self.globPanel.SetSizer(self.globSizer)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.toolbar,0,wx.EXPAND)
        self.sizer.Add(wx.StaticLine(self), 0, wx.EXPAND)
        self.sizer.Add(self.tab, 1, wx.EXPAND)
        self.SetSizer(self.sizer)
        self.Layout()
        self.toolbar.Realize()

        # Show it !!!
        self.Show(1)            

def main():
    app = wx.PySimpleApp()
    view = MainWindow(None, "Input filter")
    app.MainLoop()

if __name__ == "__main__":
    main()

このように少し良くなりましたが、静的な行が表示されず、チェックボックスラベルの最初の文字のみが表示されます

self.tonnageStatic = wx.StaticText(self.globPanel, wx.ID_ANY, "Tonnage limit (in tons): ")
self.tonnageEdit = wx.TextCtrl(self.globPanel, wx.ID_ANY, '30000') 
self.tonnageSizer = wx.BoxSizer(wx.HORIZONTAL)
self.tonnageSizer.Add(self.tonnageStatic, 0, flag=wx.EXPAND|wx.ALL)
self.tonnageSizer.Add(self.tonnageEdit, 0, flag=wx.EXPAND|wx.ALL)

self.filterCheck = wx.CheckBox(self.globPanel, wx.ID_ANY, "Enable filter on matchings categories")

self.globSizer = wx.BoxSizer(wx.VERTICAL)
self.globSizer.Add(self.tonnageSizer)
self.globSizer.Add(wx.StaticLine(self.globPanel), 0, wx.EXPAND)
self.globSizer.Add(self.filterCheck, 0, wx.EXPAND)
self.globPanel.SetSizer(self.globSizer)

self.sizer = wx.BoxSizer(wx.VERTICAL)
self.sizer.Add(self.toolbar,0,wx.EXPAND)
self.sizer.Add(wx.StaticLine(self), 0, wx.EXPAND)
self.sizer.Add(self.tab, 1, wx.EXPAND)
self.SetSizer(self.sizer)
self.globPanel.Layout()
self.Layout()
self.toolbar.Realize()

# Show it !!!
self.Show(1) 
4

1 に答える 1

1

私はちょうどそれをWindowsで実行しました。行.Layout()の後にglobPanelを呼び出すと、サイザーself.Layout()が形になります:)

wx.ALLまた、上下左右どちらでも同じように使えます

編集:なぜ奇妙な振る舞いなのか興味があり、もう少し調べました。ノートブックを使用した場所を調べましたが、ページには常にパネルを使用しています。LayoutNotebookPages を Panels に変更すると、呼び出しをなくすことができ、期待どおりに機能します。

于 2012-06-08T12:34:57.517 に答える