0

3 つのタブ付きパネルを備えたアプリがあります。現在、同じパネルでwx.CallAfter(self.running_log1.AppendText, line)AppendText を wx.TextCtrl に送信していますが、AppendText を別のタブ付きパネル RunningPane2 で wx.TextCtrl に送信したいのですが、wx.CallAfter(RunningPane2.running_log2.AppendText, line)これは機能しません。または、RunningPane2 クラスを完全に削除してself.running_log2 = wx.TextCtrl、RunningPane1 パネルから作成できますか?

class MainWindow(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(900, 700))
        self.tabbed = wx.Notebook(self, -1, style=(wx.NB_TOP))

        self.running1 = RunningPane1(self.tabbed, run_params)
        self.running2 = RunningPane2(self.tabbed, run_params)

        self.submissions = SubmissionPane(self.tabbed, self.running1, self.running2, run_params)

        self.tabbed.AddPage(self.submissions, "Submit Job")
        self.tabbed.AddPage(self.running1, "Running Jobs 1")
        self.tabbed.AddPage(self.running2, "Running Jobs 2")

        self.Show()
#---
class SubmissionPane(wx.Panel):
    def __init__(self, parent, running_pane1, running_pane2, run_params):
        wx.Panel.__init__(self, parent)
...............

class RunningPane1(wx.Panel):
    def __init__(self, parent, run_params):
        wx.Panel.__init__(self, parent, -1)

        self.running_log1 = wx.TextCtrl(self, -1, pos=(5, 5), size=(875,605),
                                       style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)

    def StartWork(self, indir1, the_queue_pane, runningMode, showBox1, tvtitle):
        ..............
        wx.CallAfter(self.running_log1.AppendText, line)

        wx.CallAfter(RunningPane2.running_log2.AppendText, line)
        ..............
#---
class RunningPane2(wx.Panel):
    def __init__(self, parent, run_params):
        wx.Panel.__init__(self, parent, -1)

        self.running_log2 = wx.TextCtrl(self, -1, pos=(5, 5), size=(875,605),
                                       style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
        self.Show()
4

1 に答える 1

1

この方法では機能しません: RunningPane2.running_log2.

のインスタンスを取得する必要があります。インスタンスをにrunning_log2渡すと、そこから取得できます。MainWindowRunningPanelrunning_log2

class MainWindow(wx.Frame):
    def __init__(self, parent, id, title):
        ...........

        self.running1 = RunningPane1(self.tabbed, self, run_params)




class RunningPane1(wx.Panel):
    def __init__(self, parent, frame, run_params):
        wx.Panel.__init__(self, parent, -1)
        ..............
        self.frame = frame



    def StartWork(self, indir1, the_queue_pane, runningMode, showBox1, tvtitle):
        ..............
        wx.CallAfter(self.running_log1.AppendText, line)

        wx.CallAfter(self.frame.running2.running_log2.AppendText, line)
于 2014-03-17T06:36:44.990 に答える