2016-07-11 8 views
0

私はwxPythonの中にGUIを開発しようとしているが、私はいくつかの助けが必要になります。ここで私が達成したいことがあります。 アプリは3つのフレームを有していなければならないが、キャッチは、1つのフレームが一度に表示されなければならないということです。これらのフレームにはそれぞれボタンが必要です。これらのボタンは、一種のメニューとして機能するはずで、現在表示されているフレームを非表示にし、(b)別のフレームを表示する必要があります。 私は一般的なアプローチだけで複数のパネルで1つのフレームを使用することです知っているが、何らかの理由でこのアプローチは、私にとってはあまりにも良い動作しません。 アプリケーションは、スクリーンリーダーのユーザーに完全にアクセス可能である必要があり、パネルの表示と非表示いくつかのケースでは十分ではないようです。私は自分自身をスクリーンリーダーであり、パネルを表示したり隠したりするだけでは、スクリーンリーダーがフレームの内容が変更されたことに気付くとは限りません。私は、異なるフレームをすべて表示することが問題を解決できると推測しています。 ちょっとした実例に感謝します。私は使用すべきもののいくつかを知っていますが、これにもかかわらず私は何かを考え出すことができませんでした。 多くのありがとうございます。wxPythonを:変更フレームOnButtonPress

答えて

1

あなただけのフレームを隠し、別のものを表示することができます。このように:

import wx 

class Frame(wx.Frame): 

    def __init__(self, title): 
     wx.Frame.__init__(self, None, title=title, size=(350,200)) 

     btn = wx.Button(self, label="switch") 
     btn.Bind(wx.EVT_BUTTON, self._OnButtonClick) 

     self.Bind(wx.EVT_CLOSE, self.OnClose) 

    def _OnButtonClick(self, event): 
     self.frame.Show() 
     self.Hide() 

    def OnClose(self, event): 
     self.frame.Destroy() 
     self.Destroy() 


app = wx.App(redirect=True) 

f1 = Frame("Frame1") 
f2 = Frame("Frame2") 
f1.frame = f2 
f2.frame = f1 

f1.Show() 

app.MainLoop() 
+0

ありがとうございました。仕事はしっかりしていますが、マイナーなことが1つあります。スクリプトを実行してGUIを閉じると、コンソールは開いたままになります。私の理解が正しい場合、これは隠れフレームがまだ存在するためです(表示されないだけです)。どのように表示フレームが閉じられた後に隠しフレームを閉じるための良い方法? wx.Frame.SetTopWindow()メソッドを使用して、ここでクロスに来たスクリプトの1つです。これはこのシナリオで使用する正しい方法ですか、もしそうなら、それをどこに追加しますか? –

+0

あなたがOnCloseのイベント内でそれを行うことができ、[この回答](http://stackoverflow.com/a/10837130/4281182)を参照してください。両方のフレームで破壊を呼び出す(selfとself.frame) –

+0

ありがとう、それはそれをしました。 –

関連する問題