0

wxPython、MainWindow、およびRecWindowを使用して作成された独自のフレームを持つ2つのpyファイルがあります。MainWindow には、キーワード「recovery」を使用して含まれる RecWindow python ファイルがあります。

メインウィンドウ コード:

class MainWindow(wx.Frame):
def __init__(self,parent,id,title):
    wx.Frame.__init__(self, parent, wx.ID_ANY,title,pos=(500,200), size = (650,500), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
    self.Bind(wx.EVT_CLOSE,self.OnExit)
    self.SetIcon(wx.Icon('etc\icons\download.ico', wx.BITMAP_TYPE_ICO))
    panel = wx.Panel(self)

RecWindow コード:

class RecWindow(wx.Frame):
def __init__(self,parent,id,title):
    wx.Frame.__init__(self, parent, wx.ID_ANY,title,pos=(400,200), size = (700,600), style = wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)
    self.SetIcon(wx.Icon('etc\icons\download.ico', wx.BITMAP_TYPE_ICO))
    self.count = 0

MainWindow のボタンをクリックすると、 MainWindow が非表示になり、以下に示すように RecWindow のインスタンスが作成されます。

def OpenRec(self,event):#this will be used to open the next frame
    OR = recovery(None,-1,"RAVE")
    OR.Show(True)
    MainWindow.Hide()

今、私が確信していないのは、RecWindow を閉じたら MainWindow に戻る方法です。RecWindow にはキャンセル ボタンと終了ボタンがあり、どちらも self.close() 関数にマップされます。MainWindow を再び表示するにはどうすればよいでしょうか。

4

2 に答える 2

0

pubsub を使用して、メイン ウィンドウにメッセージを送信し、再度表示するように指示します。私は実際にここでそれを行う方法の例を持っています:

このチュートリアルでは、wxPython 2.8 で利用可能だった少し古い API を使用していることに注意してください。wxPython 2.9 を使用している場合は、この記事で詳しく説明するわずかに異なる API を使用する必要があります。

于 2013-11-12T17:00:36.110 に答える
0

RecWindow のインスタンスを作成するときは、main_window で参照を保持し、その close イベントにバインドします。

main_window のクローズ ハンドラーで、閉じられたウィンドウが RecWindow であるかどうかを確認します。

そうであった場合は、それへの参照をクリアし、main_window を表示します。

閉じたウィンドウが main_window だった場合は、必要なコードを実行します。

最後に event.Skip() を呼び出して、ウィンドウが破棄されるようにします。

import wx


class MainWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, (500, 200), (650, 500),
            wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)

        panel = wx.Panel(self)
        button = wx.Button(panel, wx.ID_OPEN)

        panel.sizer = wx.BoxSizer(wx.VERTICAL)
        panel.sizer.Add(button, 0, wx.ALL, 7)
        panel.SetSizer(panel.sizer)

        button.Bind(wx.EVT_BUTTON, self.on_button)
        self.Bind(wx.EVT_CLOSE, self.on_close)

        self.rec_window = None

    def on_button(self, event):
        rec_window = RecWindow(self, 'Rec window')
        rec_window.Show()
        self.Hide()
        rec_window.Bind(wx.EVT_CLOSE, self.on_close)
        self.rec_window = rec_window

    def on_close(self, event):
        closed_window = event.EventObject
        if closed_window == self.rec_window:
            self.rec_window = None
            self.Show()
        elif closed_window == self:
            print 'Carry out your code for when Main window closes'
        event.Skip()


class RecWindow(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, (400, 200), (700, 600),
            wx.DEFAULT_FRAME_STYLE | wx.NO_FULL_REPAINT_ON_RESIZE)


app = wx.App(False)
main_window = MainWindow(None, 'Main window')
main_window.Show()
app.MainLoop()
于 2013-11-12T18:48:33.447 に答える