簡體   English   中英

wxPython:在筆記本中調整筆記本的大小

[英]wxPython: Resizing a notebook within a notebook

我制作了一個GUI,其中有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()

檢查此代碼以查看在添加到容器大小調整器中以產生所需內容時如何將其分配給小部件。
您必須將面板比例設置為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()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM