Как убить ранее запущенные методы, вызванные событием
Уважаемые члены нашего сообщества,
Ниже приведен простой 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()
1 ответ
Если запуск процесса занимает "много времени", вам нужно поместить этот процесс в отдельный поток, иначе отзывчивость вашего графического интерфейса замедлится или остановится. В wxPython wiki есть хорошая статья о различных способах использования потоков, и я также написал учебник по этой теме.