mon projet a beaucoup de fichiers python, et maintenant le problème est lorsque je clique sur le bouton dans l'interface Main-IU, il va invoquer une fonction dans un autre fichier python (sous-programme), et j'ai besoin de tout le statut en cours dans le sous-programme sera également mis à jour dans l'interface principale, comment puis-je accomplir cela? La chose que je peux essayer jusqu'à présent, je sais utilise socket, mais je veux savoir si vous avez d'autres bonnes idées sur ce sujet? Le code comme ceci: 1. Main-UI:Comment mettre à jour la barre d'état Wxpython avec streaming de données d'exécution dans un autre fichier * .py
import wx,time
from threading import Thread
from path import basicTest
EVT_RESULT_ID = wx.NewId()
def EVT_RESULT(win, func):
win.Connect(-1, -1, EVT_RESULT_ID, func)
class ResultEvent(wx.PyEvent):
def __init__(self, data):
wx.PyEvent.__init__(self)
self.SetEventType(EVT_RESULT_ID)
self.data = data
class TestThread(Thread):
def __init__(self, wxObject):
Thread.__init__(self)
self.wxObject = wxObject
self.start()
def run(self):
ce sous-script masqué peut fonctionner, mais ce que je veux faire est de le remplacer par l'invocation d'un autre fichier python
'''
for i in range(6):
time.sleep(1)
wx.PostEvent(self.wxObject, ResultEvent(i))
'''
data = basicTest().run(10)
wx.PostEvent(self.wxObject, ResultEvent(data))
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Tester")
panel = wx.Panel(self, wx.ID_ANY)
self.btn = wx.Button(panel, label="Start Test")
self.statusbar = self.CreateStatusBar()
self.btn.Bind(wx.EVT_BUTTON, self.onButton)
EVT_RESULT(self, self.updateStatus)
def onButton(self, event):
TestThread(self)
btn = event.GetEventObject()
btn.Disable()
def updateStatus(self, msg):
t = msg.data
self.statusbar.SetStatusText("Sequence %i running.." %t)
self.btn.Enable()
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyForm().Show()
app.MainLoop()
- sous-script:
import time class basicTest(): def run(self,inter): for i in range(inter): return i time.sleep(1)
Comme la liste ci-dessus et aussi je sais que l'interface principale seulement mis à jour lorsque le sous-script terminé, il ne rafraîchit pas d'un autre sous, peut-on m'aider, très apprécier