前提・実現したいこと
wxpython を使って、スクロール機能と子のPanelを拡大縮小できるFrameを実装したい。
発生している問題・エラーメッセージ
スクロールはできるが、拡大縮小した時に画面の更新ができない。
該当のソースコード
Python
1from wx import App, Frame, Panel, BoxSizer, Button 2from wx import ID_ANY, DefaultPosition, DefaultSize, DEFAULT_FRAME_STYLE, FrameNameStr, VERTICAL, EXPAND 3from wx import EVT_BUTTON 4from wx.lib.scrolledpanel import ScrolledPanel 5 6 7class ImageViewer(Frame): 8 def __init__(self, parent=None, id=ID_ANY, title="", pos=DefaultPosition, size=DefaultSize, style=DEFAULT_FRAME_STYLE, name=FrameNameStr): 9 super().__init__(parent=parent, id=id, title=title, pos=pos, size=size, style=style, name=name) 10 sizer = BoxSizer(VERTICAL) 11 self.SetSizer(sizer) 12 self.SetAutoLayout(True) 13 14 self.scroll_panel = ScrolledPanel(self) 15 self.scroll_panel.SetupScrolling() 16 17 self.img_sizer = BoxSizer() 18 self.scroll_panel.SetSizer(self.img_sizer) 19 20 self.img = Panel(self.scroll_panel, size=(20, 20)) 21 self.img_sizer.Add(self.img) 22 self.img.SetBackgroundColour('#0F0') 23 24 self.btn_panel = Panel(self) 25 btn_sizer = BoxSizer() 26 self.btn_panel.SetSizer(btn_sizer) 27 sizer.Add(self.scroll_panel, 1, EXPAND) 28 sizer.Add(self.btn_panel, 0, EXPAND) 29 self.SetAutoLayout(True) 30 31 zoom_in_btn = Button(self.btn_panel, label='+', size=(20, 20)) 32 zoom_in_btn.Bind(EVT_BUTTON, self.zoom_in) 33 btn_sizer.Add(zoom_in_btn) 34 35 zoom_out_btn = Button(self.btn_panel, label='-', size=(20, 20)) 36 zoom_out_btn.Bind(EVT_BUTTON, self.zoom_out) 37 btn_sizer.Add(zoom_out_btn) 38 39 self.Show() 40 41 def zoom_in(self, event): 42 self.img_sizer.Clear() 43 x, y = self.img.GetSize() 44 x *= 2 45 y *= 2 46 self.img = Panel(self.scroll_panel, size=(x, y)) 47 self.img_sizer.Add(self.img, 0) 48 self.img.SetBackgroundColour('#0F0') 49 50 self.scroll_panel.SetupScrolling() 51 self.scroll_panel.Refresh() 52 53 def zoom_out(self, event): 54 self.img_sizer.Clear() 55 x, y = self.img.GetSize() 56 x //= 2 57 y //= 2 58 self.img = Panel(self.scroll_panel, size=(x, y)) 59 self.img_sizer.Add(self.img, 0) 60 self.img.SetBackgroundColour('#0F0') 61 # 下これを有効にすると、zoom out の時も少し更新される。 62 # test = Panel(self.scroll_panel, size=(x, y)) 63 # self.img_sizer.Add(test, 0) 64 self.scroll_panel.SetupScrolling() 65 self.scroll_panel.Refresh() 66 67 68if __name__ == "__main__": 69 app = App() 70 ImageViewer() 71 app.MainLoop()
試したこと
Panel.Refresh()
Panel.Hide() -> Panel.Show()
補足情報(FW/ツールのバージョンなど)
Python 3.8.2
wxPython 4.1.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/29 01:59
2020/07/29 02:42