0

1 つのメインフレーム (Frame) と 2 つの子フレーム (ChildFrame1 および ChildFrame2) から構成される単純なプログラムを作成しました。Mainframe には 2 つのボタンがあり、1 つは ChildFrame1 が既に作成されているかどうかを確認し、そうでない場合は同じものを作成し、もう 1 つは ChildFrame2 が既に作成されているかどうかを確認し、そうでない場合は同じものを作成します。ここでトリッキーな部分 (少なくとも私にとってはトリッキー) である ChildFrame1 には、メインフレームから ChildFrame2 が既に作成されているかどうかを確認する必要があるボタンがあり、作成されていない場合は作成します。私のコードでは、このボタンは、メインフレームから以前に作成された ChildFrame2 と一緒に別の ChildFrame2 を作成するだけです。どうすればこれを機能させることができますか? 基本的に、2 つのフレームに 2 つのボタンがありますが、イベントは 1 つです。

コード

import wx

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,'Parent')
        panel = wx.Panel(self, -1)

        sizer = wx.BoxSizer(wx.VERTICAL)
        button = wx.Button(panel, -1, 'Open Child1')
        button2 = wx.Button(panel, -1, 'Open Child2')

        sizer.Add(button, 0, wx.CENTER|wx.ALL, 5)
        sizer.Add(button2, 0, wx.CENTER|wx.ALL, 5)

        panel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.onButton,  button)
        self.Bind(wx.EVT_BUTTON, self.onButton2,  button2)

    def onButton(self, e):
        try:
            self.ChildF.Show()
        except:
            self.ChildF = ChildFrame1()
            self.ChildF.Show()

        self.ChildF.SetFocus()

    def onButton2(self, e):
        try:
            self.ChildF2.Show()
        except:
            self.ChildF2 = ChildFrame2()
            self.ChildF2.Show()

        self.ChildF2.SetFocus()

class ChildFrame1(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow, wx.ID_ANY, 'Child1')
        panel = wx.Panel(self, -1)

        sizer = wx.BoxSizer(wx.VERTICAL)
        button = wx.Button(panel, -1, 'Open Child2')
        sizer.Add(button, 0, wx.CENTER|wx.ALL, 5)

        panel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.OnButton, button)

    def OnButton(self,e):
        try:
            self.ChildF.Show()
        except:
            self.ChildF = ChildFrame2()
            self.ChildF.Show()

        self.ChildF.SetFocus()

class ChildFrame2(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow, wx.ID_ANY, 'Child2')

if __name__ == '__main__':
    app = wx.App()
    frame = Frame().Show()
    app.MainLoop()
4

1 に答える 1

1

ChildFrame2 を開く/表示するために、ChildFrame1 のボタン ハンドラーを親フレーム メソッドにバインドできます。

import wx


class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 'Parent')
        panel = wx.Panel(self, -1)

        sizer = wx.BoxSizer(wx.VERTICAL)
        button = wx.Button(panel, -1, 'Open Child1')
        button2 = wx.Button(panel, -1, 'Open Child2')

        sizer.Add(button, 0, wx.CENTER | wx.ALL, 5)
        sizer.Add(button2, 0, wx.CENTER | wx.ALL, 5)

        panel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.onButton, button)
        self.Bind(wx.EVT_BUTTON, self.onButton2, button2)

    def onButton(self, e):
        try:
            self.ChildF.Show()
        except:
            self.ChildF = ChildFrame1()
            self.ChildF.Show()

        self.ChildF.SetFocus()

    def onButton2(self, e):
        try:
            self.ChildF2.Show()
        except:
            self.ChildF2 = ChildFrame2()
            self.ChildF2.Show()

        self.ChildF2.SetFocus()


class ChildFrame1(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow, wx.ID_ANY, 'Child1')
        panel = wx.Panel(self, -1)

        sizer = wx.BoxSizer(wx.VERTICAL)
        button = wx.Button(panel, -1, 'Open Child2')
        sizer.Add(button, 0, wx.CENTER | wx.ALL, 5)

        panel.SetSizer(sizer)

        self.Bind(wx.EVT_BUTTON, self.GetParent().onButton2, button)


class ChildFrame2(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, wx.GetApp().TopWindow, wx.ID_ANY, 'Child2')

if __name__ == '__main__':
    app = wx.App()
    frame = Frame().Show()
    app.MainLoop()
于 2013-05-21T12:14:05.570 に答える