0

GUIからスクリプト/モジュールをブロックせずに実行および停止できるようにしたい。GUIコード内での「単純な」長いタスクのスレッド化と実行に関するいくつかの基本的なことを学びました。ただし、すべての例は、バイアボートできる単純なループwhileまたはforループに関するものです。ほとんどの場合、それはある種のカウントです。

したがって、問題は次のとおりです。wx.pythonベースのGUIを使用して外部スクリプト/モジュールを実行/停止する方法は?スクリプトは特定のものではなく、あらゆる種類の長いタスクになる可能性があります。

これが基本的なwx.Pythonサンプルコードです!

import wx

class MyApp (wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, title = 'Example')
        self.SetTopWindow(self.frame)
        self.frame.Show()

        return True

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title ,style = (wx.MINIMIZE_BOX | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN))

        button1 = wx.Button(self,-1,'Start')
        button2 = wx.Button(self,-1, 'Stop')
        self.gauge1 = wx.Button(self, -1)

        box = wx.BoxSizer(wx.VERTICAL)

        box.Add(button1,1, wx.ALL, 10)
        box.Add(button2,1, wx.ALL, 10)
        box.Add(self.gauge1,1,wx.EXPAND|wx.ALL,10)

        self.SetSizer(box, wx.EXPAND)

        self.Bind(wx.EVT_BUTTON, self.OnStart, button1)
        self.Bind(wx.EVT_BUTTON, self.OnStop, button2)

    def OnStart(self,e):
        pass


    def OnStop(self,e):
        pass


if __name__=='__main__':
    app = MyApp(False)
    app.MainLoop()
4

1 に答える 1

1

呼び出しているスクリプトは、正常に終了するための何らかのメカニズムが必要になるか、混乱に対処する必要があります。Python の subprocess モジュールを使用して外部スクリプトを起動し、必要に応じて psutil ( https://github.com/giampaolo/psutil ) などを使用してそれを強制終了します。それには、subprocess でプロセス ID (pid) を取得し、後でそれを強制終了できるように追跡する必要があります。

wxPython で psutil を使用する例をここに書きました

于 2013-03-01T14:19:22.120 に答える