打开运行另一个线程的第二个响应框架

问题描述

我有一个运行良好的应用程序。应用程序上有一个按钮,应该打开一个新窗口并在后台运行 ssh 命令。然后应该将该命令的输出写入窗口。

所有这些同时保持主窗口响应并运行一些后台任务。

这就是我所拥有的:

def startGetJobSSH(self,event=None):
    self.threadList.append(threading.Thread(target=statusWindow,args=[self]))
    self.threadList[len(self.threadList)-1].start()

这是我的主程序中的函数。它将“statusWindow”作为一个新线程启动。

class statusWindow(wx.Frame):

FLAG_KILL_THREAD = False

def __init__(self,parent):
    LogEntry("statusWindow Class created")
    wx.Frame.__init__(self,parent=parent.frame)
    self.stillrunning=True
    self.Bind(wx.EVT_CLOSE,self.onQuit)
    self.panel = wx.Panel(self,size=(600,600))
    self.topLevelSizer = wx.BoxSizer(wx.VERTICAL)
    self.panel.SetSizer(self.topLevelSizer)
    self.statusTextBox = wx.TextCtrl(self.panel,style=wx.NO_BORDER | wx.TE_MULTILINE |
                                     wx.TE_DONTWRAP | wx.HSCROLL | wx.TE_READONLY,size=(500,500))
    self.topLevelSizer.Add(self.statusTextBox)
    self.okButton = wx.Button(self.panel,label='Ok')
    self.okButton.Bind(wx.EVT_BUTTON,self.onQuit)
    self.topLevelSizer.Add(self.okButton,wx.ALL,5)
    #self.Fit()


    self.Show()

    self.mythread = threading.Thread(target=self.trysomething)
    self.mythread.start()



    while self.mythread.is_alive():
        time.sleep(0.1)
        wx.GetApp().Yield()
        self.statusTextBox.AppendText("Running\n")
        continue


def trysomething(self,event=None):
    for i in range(100):
        self.statusTextBox.AppendText("Number: "  +  str(i) + "\n")
        time.sleep(0.1)

def onQuit(self,event=None):
    self.FLAG_KILL_THREAD = True
    self.Hide()
    print("joining")
    self.mythread.Join(5)
    print("joined")
    self.Destroy()

这是课程。布局没有完成,并不重要。重要的是两件事。第一个线程似乎没有做任何事情。尽管我启动了一个应该将内容写入文本框的线程,但文本并未附加到其中。

其次是框架没有像它应该的那样响应。鼠标悬停在它上面时会变成“正在加载”圆圈,表示窗口正在工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)