2016-04-04 24 views
0

2つのパネルで簡単なコードを記述したいと思います。シンプルな「こんにちは」とその隣のボタン。ボタンはパネルをパネル2に変更し、テキスト「パネル2」とそれの横にあるボタンを押します。私はそれをどのように達成できるのか分かりません。コード:wxPython - ボタンでパネルを変更する

import wx 


class Glowne(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent) 

     self.SetSize((800,600)) 

     tekst = 'HELLO' 
     font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
     wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font) 

     btn = wx.Button(self, -1, "Change panel", (345, 100)) 
     self.Bind(wx.EVT_BUTTON, Program.zmiana, btn) 

class Glowne1(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 

     tekst = 'Panel 2' 
     font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
    wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font) 

     btn = wx.Button(self, -1, "Change panel", (345, 100)) 
     #self.Bind(wx.EVT_BUTTON, frame.zmiana, btn) 



class Program(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY,'Program') 

     panel_one = Glowne(self) 
     self.panel_two = Glowne1(self) 
     self.panel_two.Hide() 
     self.SetSize((800,600)) 
     self.Centre() 
    def zmiana(self): 
     self.panel_one.Hide() 
     self.panel_two.Show() 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = Program() 
    frame.Show() 
    app.MainLoop() 

ありがとうございました。私はthis tutorialを読みますが、私はそれを私の簡単なコードで動作させることはできません。

答えて

1

プログラムフレームにはサイザーが追加されていなければなりません。パネルにはプログラムにアクセスできるようにパネルにbtnが追加されていなければなりません。ここで

import wx 


class Glowne(wx.Panel): 

    def __init__(self, parent): 
     wx.Panel.__init__(self, parent=parent) 

     self.SetSize((800, 600)) 

     tekst = 'HELLO' 
     font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
     wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font) 

     self.btn = wx.Button(self, -1, "Change panel", (345, 100)) 


class Glowne1(wx.Panel): 

    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 

     tekst = 'Panel 2' 
     font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL) 
     wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font) 

     self.btn = wx.Button(self, -1, "Change panel", (345, 100)) 


class Program(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, wx.ID_ANY, 'Program') 

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

     self.panel_one = Glowne(self) 
     sizer.Add(self.panel_one, 1, wx.EXPAND) 
     self.panel_one.btn.Bind(wx.EVT_BUTTON, self.show_panel_two) 
     self.panel_two = Glowne1(self) 
     sizer.Add(self.panel_two, 1, wx.EXPAND) 
     self.panel_two.btn.Bind(wx.EVT_BUTTON, self.show_panel_one) 
     self.panel_two.Hide() 
     self.SetSize((800, 600)) 
     self.Centre() 

    def show_panel_one(self, event): 
     self.panel_one.Show() 
     self.panel_two.Hide() 
     self.Layout() 

    def show_panel_two(self, event): 
     self.panel_two.Show() 
     self.panel_one.Hide() 
     self.Layout() 


if __name__ == "__main__": 
    app = wx.App(False) 
    frame = Program() 
    frame.Show() 
    app.MainLoop() 
+0

ありがとう一例です。それはうまく動作します。プログラムを書くのは適切な方法ですか?私はパネル、プログラム設定e.t.cでプログラムを意味しますか? – jundymek

関連する問題