2017-02-06 10 views
0

は(コードは以下のスニペットを参照): -子ダイアログでフレームにMakeModal()メソッドを適用するためにどのように私は、私は次のように私のファイル構造を持っているのPython 27にwxPythonのクラシックを使用しています

frame.py =これをファイルは、フレーム、ダイアログ(それぞれMyFrame1とMyDialog1)のための2つのクラス

main.py =クラス上、このファイルのインポートを含み、また上記(MyFrame2とMyDialog2それぞれ)に基づいて、2つのサブクラスが含ま。

上記のようにファイル構造を維持すると、ダイアログウィンドウを開いたときにフレームウィンドウを非アクティブにするにはどうすればよいですか?

上記のファイル配置/構造にどのようにしてMakeModal()メソッドを適切に適用できますか?これまでに見つかったすべての例では、フレームとダイアログの代わりに2つのフレームを使用しています。

frame.py

import wx 

# ************ FRAME 1 ************ # 
# ************ FRAME 1 ************ # 
class MyFrame1 (wx.Frame): 

    def __init__(self, parent): 
     wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(500,300), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 

     bSizer = wx.BoxSizer(wx.VERTICAL) 

     self.child_button = wx.Button(self, wx.ID_ANY, u"Child Frame", wx.DefaultPosition, wx.DefaultSize, 0) 
     bSizer.Add(self.child_button, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5) 


     self.SetSizer(bSizer) 
     self.Layout() 

     self.Centre(wx.BOTH) 

     # Connect Events 
     self.child_button.Bind(wx.EVT_BUTTON, self.On_child_button) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def On_child_button(self, event): 
     event.Skip() 



# ************ DIALOG 1 ************ # 
# ************ DIALOG 1 ************ # 
class MyDialog1 (wx.Dialog): 

    def __init__(self, parent): 
     wx.Dialog.__init__ (self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size(300,200), style = wx.DEFAULT_DIALOG_STYLE) 

     self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 


     self.Centre(wx.BOTH) 

     # Connect Events 
     self.Bind(wx.EVT_CLOSE, self.onClose) 

    def __del__(self): 
     pass 


    # Virtual event handlers, overide them in your derived class 
    def onClose(self, event): 
     event.Skip() 

main.py

import wx 
from frame import MyFrame1, MyDialog1 


class MyFrame2(MyFrame1): 
    def __init__(self, parent): 
     MyFrame1.__init__ (self, parent) 

    def On_child_button(self, event): 
     MyDialog2(None).Show() 


class MyDialog2(MyDialog1): 
    def __init__(self, parent): 
     MyDialog1.__init__ (self, parent) 

    def onClose(self, event): 
     self.Destroy() 


app = wx.App(0) 
MyFrame2(None).Show() 
app.MainLoop() 
+0

ShowModal()を代わりに試してください。 – Igor

答えて

0

あなたはダイアログがすでにモダリティ機能が内蔵されてきたように、フレームにMakeModalを使用する必要はありません-に。 Showメソッドの代わりに、ダイアログのShowModalメソッドを呼び出してください。 ShowModalはネストされたイベントループを作成するので、ダイアログが終了するまでShowModalは戻らず、アプリケーション内の他のウィンドウへの入力はブロックされます。典型的な使用パターンは次のようになります。

with MyDialog(self, foo, bar) as dlg: 
    if dlg.ShowModal() == wx.ID_OK: 
     # do something with dlg values 
+0

ありがとう、それは完全に動作します。 –

関連する問題