LoginSignup
7
8

More than 5 years have passed since last update.

wxPythonを使った画面遷移

Posted at

環境

・Windows10
・Python 3.6.7
・wxPython 4.0.3

概要

wxPythonを使って複数の画面をたくさんのWindowを生成せずに複数画面を作成するのが目的です。
frameのルートの要素にBoxSizerを追加して画面遷移が発生するたびに各要素を削除してsizerに追加しなおすという形式で画面遷移しました。

ソースコード

screen_transition.py
import wx

class mainFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, wx.ID_ANY, 'Testapp', size=(900,500), style=wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN)

        self.CreateStatusBar()
        self.SetStatusText('Testapp')
        self.GetStatusBar().SetBackgroundColour(None)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.sizer)

        self.set_screen(Panel_1)


    def set_screen(self,panel):
        self.sizer.Clear(False)
        self.DestroyChildren()

        self.now_panel=panel(self)
        self.sizer.Add(self.now_panel,1,wx.EXPAND)
        self.sizer.Layout()



class Panel_1(wx.Panel):
    def __init__(self, parent):
        super().__init__(parent, wx.ID_ANY)
        self.parent=parent

        title_text = wx.StaticText(self, wx.ID_ANY, 'タイトル', style=wx.TE_CENTER)
        font_Title = wx.Font(24, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
        title_text.SetFont(font_Title)

        start_button = wx.Button(self, wx.ID_ANY, 'スタート')
        start_button.Bind(wx.EVT_BUTTON, self.click_start_button)

        layout = wx.BoxSizer(wx.VERTICAL)

        layout.Add(title_text, flag=wx.ALIGN_CENTER)
        layout.Add(start_button, flag=wx.ALIGN_CENTER)

        self.SetSizer(layout)

    def click_start_button(self, event):
        self.parent.set_screen(Panel_2)


class Panel_2(wx.Panel):
    def __init__(self, parent):
        super().__init__(parent, wx.ID_ANY)
        self.parent=parent

        title_text = wx.StaticText(self, wx.ID_ANY, '遷移後画面', style=wx.TE_CENTER)
        font_Title = wx.Font(24, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)
        title_text.SetFont(font_Title)

        start_button = wx.Button(self, wx.ID_ANY, 'スタートに戻る')
        start_button.Bind(wx.EVT_BUTTON, self.click_start_button)

        layout = wx.BoxSizer(wx.VERTICAL)

        layout.Add(title_text, flag=wx.ALIGN_CENTER)
        layout.Add(start_button, flag=wx.ALIGN_CENTER)

        self.SetSizer(layout)

    def click_start_button(self, event):
        self.parent.set_screen(Panel_1)

if __name__ == '__main__':

    application = wx.App()
    frame = mainFrame()
    frame.Show()
    application.MainLoop()

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8