0

私の現在のセットアップ

class AppFrame(wx.Frame):
    def__init__(self,parent,id=-1,title='program'):
        wx.Frame.__init__(self,parent,id,title,size=((400,400)))
        # Panels
        self.AppPanel = wx.Panel(self,-1)
        self.AppPanel.SetBackgroundColour('grey')

class NBPanel(wx.Notebook):
     def__init__(etc)

この NBPanel クラス (ノートブック パネルを作成しようとしています) を AppFrame 内に追加して、AppFrame 内に両方のパネルが表示されるようにするにはどうすればよいですか。これを理解しようとしている間、私の心はおかしくなります。NBPanel クラスを AppPanel の子にすると思いますか?

そのような:

class AppFrame(wx.Frame):
    def__init__(self,parent,id=-1,title='Mango'):
        wx.Frame.__init__(self,parent,id,title,size=((400,400)))

        # Panels
        self.AppPanel = wx.Panel(self,-1)
        self.AppPanel.SetBackgroundColour('grey')

        **self.AppPanel2 = NBPanel(self.AppPanel,-1)**

これのいくつかのバリエーションを試してみましたが、基本的にいくつかの種類のエラーが発生しました。

ところで、(AppPanel) は、このコードが示すようにむき出しではありません。いくつかのボタンなどを備えた左側の垂直方向にサイザーが設定されています。ノートブック パネルの右側に別のパネルを追加する必要があるため、ノートブック パネルが AppFrame の中央領域の大部分を占めるようにします。

4

1 に答える 1

1

パネルがフレームの唯一の子である場合は、フレーム全体をカバーするパネルが必要になります。これは自動的に行われます。

目的のレイアウトを得るには、水平ボックスサイザー ( wx.BoxSizer(wx.HORIZONTAL)) に配置します。最初にボタンを含むサイザーを追加し、次に NBPanel を追加し、次に必要なパネルを右側に追加すると、目的のレイアウトが得られます。

これらのコントロールはすべて親として AppPanel を必要とし、水平方向のサイザーを AppPanels サイザーとして設定する必要があります。

ノートブックがフレーム内のほとんどのスペースを占有するようにするには、サイザーにプロポーション 1 でノートブックを追加し、他のアイテムを 0 で追加します。

これが物事をより明確にするなら、私は簡単なデモをまとめて喜んでいます:)

編集:

これは、あなたが求めているレイアウトの概要を示す簡単な例です。質問があればお知らせください。また、このガイドもチェックしてください。これは非常に優れており、さまざまなプログラムやレイアウトを開始するための例がたくさん提供されています。

import wx

class NoteBookPage(wx.Panel):
    def __init__(self,parent,message):
        wx.Panel.__init__(self,parent)
        sizer= wx.BoxSizer(wx.VERTICAL)
        message= wx.StaticText(self,label=message)
        sizer.Add(message,1,wx.ALIGN_CENTRE)
        self.SetSizer(sizer)


class AppFrame(wx.Frame):
    def __init__(self,parent,id=-1,title='program'):
        wx.Frame.__init__(self,parent,id,title,size=((400,400)))
        # Panels
        self.AppPanel = wx.Panel(self,-1)
        self.AppPanel.SetBackgroundColour('grey')

        main_sizer= wx.BoxSizer(wx.HORIZONTAL)

        button_sizer= wx.BoxSizer(wx.VERTICAL)

        #buttons
        self.button1= wx.Button(self.AppPanel,label="Button 1")
        button_sizer.Add(self.button1,0,wx.EXPAND)
        self.button2= wx.Button(self.AppPanel,label="Button 2")
        button_sizer.Add(self.button2,0,wx.EXPAND)
        self.button3= wx.Button(self.AppPanel,label="Button 3")
        button_sizer.Add(self.button3,0,wx.EXPAND)
        main_sizer.Add(button_sizer,0,wx.ALL,5)

        #notebook
        self.Notebook= wx.Notebook(self.AppPanel)
        page1= NoteBookPage(self.Notebook,"I'm on page 1")
        page2= NoteBookPage(self.Notebook,"I'm on page 2")
        self.Notebook.AddPage(page1,"Page 1")
        self.Notebook.AddPage(page2,"Page 2")
        main_sizer.Add(self.Notebook,1,wx.ALL|wx.EXPAND,5)

        #panel on the right (I'm just re-using the NoteBookPage panel to save making a new one)
        right_panel= NoteBookPage(self.AppPanel,"right panel")
        main_sizer.Add(right_panel,0,wx.ALL,5)

        self.AppPanel.SetSizer(main_sizer)

        self.Show()

if __name__ == "__main__":
    app= wx.App(False)
    frame= AppFrame(None)
    app.MainLoop()
于 2012-06-20T09:11:05.343 に答える