wxPythonのスクロールはむずい・・・
Frameじゃなくて特定のBoxsizerだけをスクロールさせるのがかなりしんどかったのでメモしておく。
できるだけ最低限にするため、サイズ調整とかスタイルとかは一切省いておいたよ。
import wx
import wx.lib.scrolledpanel as scrolled
class ScrollSample(wx.Frame):
def __init__(self, title):
wx.Frame.__init__(self, None, wx.ID_ANY, title='title')
## Root
self.root_panel = wx.Panel(self, wx.ID_ANY)
self.root_box = wx.BoxSizer(wx.VERTICAL)
self.root_panel.SetSizer(self.root_box)
## Top Box
self.top_box = wx.BoxSizer(wx.HORIZONTAL)
self.root_box.Add(self.top_box)
self.btn_start = wx.Button(self.root_panel, label='start')
self.btn_stop = wx.Button(self.root_panel, label='Stop')
self.top_box.Add(self.btn_start)
self.top_box.Add(self.btn_stop)
## header Box
self.header_box = wx.BoxSizer(wx.HORIZONTAL)
self.root_box.Add(self.header_box)
self.header_a = wx.StaticText(self.root_panel, label='a')
self.header_b = wx.StaticText(self.root_panel, label='b')
self.header_c = wx.StaticText(self.root_panel, label='c')
self.header_d = wx.StaticText(self.root_panel, label='d')
self.header_box.Add(self.header_a)
self.header_box.Add(self.header_b)
self.header_box.Add(self.header_c)
self.header_box.Add(self.header_d)
## Scroll Box
self.scroll_box = wx.BoxSizer(wx.VERTICAL)
self.scroll_panel = scrolled.ScrolledPanel(
self.root_panel, -1,
style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER,
name="panel1"
)
self.scroll_panel.SetAutoLayout(1)
self.scroll_panel.SetupScrolling()
self.scroll_panel.SetSizer(self.scroll_box)
self.root_box.Add(self.scroll_panel, 1, wx.EXPAND)
## Scroll Row
for i in range(10):
row = wx.BoxSizer(wx.HORIZONTAL)
self.scroll_box.Add(row)
for i in "a b c d".split():
text = wx.TextCtrl(self.scroll_panel, value=i)
row.Add(text)
class SampleApp(wx.App):
def OnInit(self):
frame = ScrollSample('ScrollSample')
self.SetTopWindow(frame)
frame.Show(True)
# import scapy.all
return True
if __name__ == "__main__":
app = SampleApp()
app.MainLoop()