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)