0

私たちのコミュニティの親愛なるメンバー、

以下は、テキスト コントロールのみの単純な wx.app です。このテキスト コントロールが編集されると、大きなプロセスが開始されます。コントロールをゆっくりと編集すると、編集は正常に感じられます。ただし、人間がタイピングが速い場合、エディターは失速します。解決策は、関数 self.VeryLargeProcess() の以前の呼び出しを強制終了することだと思います。

どのようにしますか?これを行うより良い方法はありますか?

import wx

class MyFrame(wx.Frame):
    def __init__(self):
         wx.Frame.__init__(self, None, wx.ID_ANY, "My Frame")
         main_panel = wx.Panel(self)

        static_box = wx.StaticBox( main_panel, -1, "Text control" )
        static_box.SetFont( wx.Font( 15, wx.ROMAN, wx.NORMAL, wx.NORMAL ) )
        main_sizer = wx.StaticBoxSizer( static_box, wx.VERTICAL )

        text_ctrl = wx.TextCtrl( main_panel, wx.ID_ANY, "Edit me, a large process will start", wx.DefaultPosition, [200,100], wx.TE_MULTILINE )
        main_sizer.Add( text_ctrl, 0, wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5 )

        main_panel.SetSizer( main_sizer )
        main_sizer.SetSizeHints( self )

        self.Bind(wx.EVT_TEXT, self.VeryLargeProcess, text_ctrl)

    def VeryLargeProcess(self, event):

        # kill previous self.VeryLargeProcess()   

        for i in range(0, 3000000):
            a = i

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    frame.Show()
    app.MainLoop()
4

1 に答える 1

1

プロセスの実行に「長時間」かかる場合は、そのプロセスを別のスレッドに配置する必要があります。そうしないと、GUI の応答が遅くなるか停止します。wxPython wiki には、スレッドを使用するさまざまな方法に関する優れた記事があり、このトピックに関するチュートリアルも書きました。

于 2013-03-13T18:14:38.647 に答える