问题描述
我有一个运行良好的应用程序。应用程序上有一个按钮,应该打开一个新窗口并在后台运行 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 (将#修改为@)