[英]Custom wxPython control within notebook gets drawn over notebook tabs
[英]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.