wxPython: изменение размера блокнота внутри блокнота

Я сделал графический интерфейс, в котором есть 4 основные вкладки, затем 4 вкладки разделены пополам, с другим блокнотом слева и пустой панелью справа (здесь будет график). См. изображение моего графического интерфейса ниже. введите здесь описание изображения

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу изменить размер блокнота слева, чтобы он соответствовал содержимому блокнота. Подгоняя его содержимое, я имею в виду, что хочу, чтобы правая сторона блокнота была вытянута. Я также хочу, чтобы размер оставался фиксированным, поэтому, если я изменю размер окна, щелкнув и перетащив правый угол, он не изменит размер блокнота, но панель справа будет увеличиваться/уменьшаться в зависимости от того, щелкнул ли пользователь и перетащил.

Код ниже:

import wx
import wx.grid

class MyFrame1(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame1.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)

        self.notebook_2 = wx.Notebook(self, -1, style=0)
        self.notebook_2_pane_1 = wx.Panel(self.notebook_2, -1)
        self.notebook_2_pane_2 = wx.Panel(self.notebook_2, -1)
        self.notebook_2_pane_3 = wx.Panel(self.notebook_2, -1)
        self.notebook_2_pane_4 = wx.Panel(self.notebook_2, -1)
        self.notebook_3 = wx.Notebook(self.notebook_2_pane_1, -1, style=0)
        self.notebook_3a = wx.Notebook(self.notebook_3, -1, style=0)
        self.notebook_4 = wx.Notebook(self.notebook_3, -1, style=0)
        self.panel_2a = wx.Panel(self.notebook_4, -1)
        self.panel_2b = wx.Panel(self.notebook_3a, -1)
        self.panel_2c = wx.Panel(self.notebook_3a, -1)
        self.panel_2 = wx.Panel(self.notebook_3, -1)
        self.panel_1 = wx.Panel(self.notebook_2_pane_1, -1)
        self.grid_1 = wx.grid.Grid(self.panel_2a, -1, size=(1, 1))
        self.grid_2 = wx.grid.Grid(self.notebook_4, -1, size=(1, 1))
        self.bws_btn = wx.Button(self.panel_2b, -1, "Browse...")
        self.tctrl = wx.TextCtrl(self.panel_2b, -1) 
        self.filename = wx.StaticText(self.panel_2b, -1, 'File:')
        self.limitdata = wx.StaticText(self.panel_2b, -1, 'Limit Data:')
        self.tctrl3 = wx.TextCtrl(self.panel_2b, -1, '200') 
        self.disp_sel_pk = wx.StaticText(self.panel_2c, -1, 'Display Selected Data')
        self.toggle = wx.ToggleButton(self.panel_2c, 1, 'Toggle')
        self.add_peak = wx.StaticText(self.panel_2c, -1, 'Add Data:')
        self.add_peak_tctrl = wx.TextCtrl(self.panel_2c, -1, 'Test') 
        self.add_peak_btn = wx.Button(self.panel_2c, -1, "Add")
        self.capt_click = wx.Button(self.panel_2c, -1, "Capture Mouse Click")   
        self.save_btn = wx.Button(self.panel_2a, -1, "Save as CSV file")
        self.update_btn = wx.Button(self.panel_2a, -1, "Update")

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame1.__set_properties
        self.SetTitle("frame_2")
        self.SetMinSize((800, 600))

        self.grid_1.CreateGrid(30, 3)
        self.grid_1.SetRowLabelSize(0) # hide the rows
        self.grid_1.SetColLabelValue(0, "Data ID")
        self.grid_1.SetColLabelValue(1, "Test")
        self.grid_1.SetColLabelValue(2, "Frquency")

        self.grid_2.CreateGrid(30, 13)
        self.grid_2.SetRowLabelSize(30)
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame1.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.VERTICAL)
        sizer_3 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_4 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_5 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_6 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_5.Add(self.filename, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_4.Add(self.bws_btn, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_4.Add(self.tctrl, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_6.Add(self.limitdata, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_6.Add(self.tctrl3, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_1.Add(sizer_5)
        sizer_1.Add(sizer_4)
        sizer_1.Add(sizer_6)


        sizer_1a = wx.BoxSizer(wx.VERTICAL)
        sizer_1a.Add(self.grid_1, 1, wx.EXPAND, 0)
        sizer_1a.Add(self.save_btn, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_1a.Add(self.update_btn, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        self.panel_2b.SetSizer(sizer_1)
        self.panel_2a.SetSizer(sizer_1a)

        sizer_1b = wx.BoxSizer(wx.VERTICAL)
        sizer_4a = wx.BoxSizer(wx.HORIZONTAL)
        sizer_5a = wx.BoxSizer(wx.HORIZONTAL)
        sizer_6a = wx.BoxSizer(wx.HORIZONTAL)
        sizer_7a = wx.BoxSizer(wx.HORIZONTAL)
        sizer_8a = wx.BoxSizer(wx.HORIZONTAL)
        sizer_4a.Add(self.disp_sel_pk, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_5a.Add(self.toggle, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)
        sizer_6a.Add(self.add_peak, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)        
        sizer_7a.Add(self.add_peak_tctrl, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)      
        sizer_7a.Add(self.add_peak_btn, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)  
        sizer_8a.Add(self.capt_click, flag=wx.EXPAND | wx.RIGHT | wx.Left | wx.TOP | wx.BOTTOM, border=10)   
        sizer_1b.Add(sizer_4a)
        sizer_1b.Add(sizer_5a)
        sizer_1b.Add(sizer_6a)
        sizer_1b.Add(sizer_7a)
        sizer_1b.Add(sizer_8a)
        self.panel_2c.SetSizer(sizer_1b)

        self.notebook_3.AddPage(self.notebook_3a, "Inputs")
        self.notebook_3.AddPage(self.notebook_4, "Results")
        self.notebook_3a.AddPage(self.panel_2b, "Graph")
        self.notebook_3a.AddPage(self.panel_2c, "Calc")
        self.notebook_4.AddPage(self.panel_2a, "Info")
        self.notebook_4.AddPage(self.grid_2, "Info2")
        sizer_3.Add(self.notebook_3, 1, wx.EXPAND, 0)
        sizer_3.Add(self.panel_1, 1, wx.EXPAND, 0)

        self.notebook_2_pane_1.SetSizer(sizer_3)
        self.notebook_2.AddPage(self.notebook_2_pane_1, "Setup")
        self.notebook_2.AddPage(self.notebook_2_pane_2, "Optimisation")
        self.notebook_2.AddPage(self.notebook_2_pane_3, "Algorithm")
        self.notebook_2.AddPage(self.notebook_2_pane_4, "Data")
        sizer_2.Add(self.notebook_2, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_2)
        sizer_2.Fit(self)
        self.Layout()

if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_2 = MyFrame1(None, -1, "")
    app.SetTopWindow(frame_2)
    frame_2.Show()
    app.MainLoop()

person Harpal    schedule 21.01.2012    source источник


Ответы (1)


Проверьте этот код, чтобы увидеть, как пропорции присваиваются виджетам при добавлении в сайзеры контейнеров, чтобы получить то, что вы хотите.
Вы должны установить пропорцию панели на 1 (занимать 100% всего пространства, доступного для виджета) и блокнот. пропорция к 0 (занимает минимальное пространство, необходимое для хранения его дочерних виджетов):

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade HG on Sat Jan 21 15:09:27 2012

import wx

# begin wxGlade: extracode
# end wxGlade

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.notebook_1 = wx.Notebook(self, -1, style=0)
        self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1)
        self.notebook_2 = wx.Notebook(self.notebook_1_pane_1, -1, style=0)
        self.notebook_2_pane_1 = wx.Panel(self.notebook_2, -1)
        self.button_1 = wx.Button(self.notebook_2_pane_1, -1, "button_1")
        self.notebook_2_pane_2 = wx.Panel(self.notebook_2, -1)
        self.panel_1 = wx.Panel(self.notebook_1_pane_1, -1)
        self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1)
        self.notebook_1_pane_3 = wx.Panel(self.notebook_1, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("frame_1")
        self.panel_1.SetBackgroundColour(wx.Colour(255, 255, 0))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_3 = wx.BoxSizer(wx.VERTICAL)
        sizer_3.Add(self.button_1, 0, 0, 0)
        self.notebook_2_pane_1.SetSizer(sizer_3)
        self.notebook_2.AddPage(self.notebook_2_pane_1, "tab1")
        self.notebook_2.AddPage(self.notebook_2_pane_2, "tab2")

        sizer_2.Add(self.notebook_2, 0, wx.EXPAND, 0)      #<- notebook,proportion 0
        sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)         #<- panel,   proportion 1

        self.notebook_1_pane_1.SetSizer(sizer_2)
        self.notebook_1.AddPage(self.notebook_1_pane_1, "tab1")
        self.notebook_1.AddPage(self.notebook_1_pane_2, "tab2")
        self.notebook_1.AddPage(self.notebook_1_pane_3, "tab3")
        sizer_1.Add(self.notebook_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        self.Layout()
        # end wxGlade

# end of class MyFrame


if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_1 = MyFrame(None, -1, "")
    app.SetTopWindow(frame_1)
    frame_1.Show()
    app.MainLoop()

введите здесь описание изображения

person joaquin    schedule 21.01.2012