AppendText для wx.TextCtrl в другой панели с вкладками - wxpython

У меня есть приложение с 3 вкладками. В настоящее время я отправляю AppendText на wx.TextCtrl в той же панели wx.CallAfter(self.running_log1.AppendText, line) но также хотите отправить AppendText в wx.TextCtrl в другой панели с вкладками, RunningPane2, 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()

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)
Другие вопросы по тегам