0

我有一个带有 3 个选项卡式面板的应用程序。我目前正在同一面板中将 AppendText 发送到 wx.TextCtrl,wx.CallAfter(self.running_log1.AppendText, line)但也想在另一个选项卡式面板 RunningPane2 中将 AppendText 发送到 wx.TextCtrl,wx.CallAfter(RunningPane2.running_log2.AppendText, line)但我无法正常工作。我该怎么做,或者我可以完全取消 RunningPane2 类并创建self.running_log2 = wx.TextCtrlfrom 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,你可以将MainWindow实例传入RunningPanel,然后你就可以从中获取running_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 回答