У меня есть правильно работающий код, я понимаю, что я не вставляю достаточно кода, но я объясню каждую команду надлежащими комментариями. Мой вопрос здесь в том, почему поведение кода, а не то, что я ожидал от него.Python - wxPython Последовательность выполнения команды
Мой код:
def OnReset(self, event): # A function event which works after a button is pressed
self.reset_pump.Disable() # Disables the button so it is clicked
self.WriteToController([0x30],'GuiMsgIn') # Sends the reset command
self.flag_read.set() # Set Event of the thread
time.sleep(0.25)
self.tr.join() # Joining a Thread
self.MessageBox('Pump RESET going on Click OK \n')
# Having the above step is useful
# The question I have is based on the commands from here:
self.offset_text_control.Clear()
self.gain_text_control.Clear()
self.firmware_version_text_control.Clear()
self.pump_rpm_text_control.Clear()
self.pressure_text_control.Clear()
self.last_error_text_control.Clear()
self.error_count_text_control.Clear()
self.pump_model_text_control.Clear()
self.pump_serial_number_text_control.Clear()
self.on_time_text_control.Clear()
self.job_on_time_text_control.Clear()
# The above commands clear various widgets on my GUI.
self.ser.close() # Closes my serial connection to MCU
time.sleep(5)
self.OnCorrectComPort(event) # An external function which gets executed. This function has a Message BOX - which says - PORT IS OPENED.
return
Я ожидаю, что после того, как поток присоединился - мои команды очистит GUI. Затем закройте последовательное соединение, используя (ser.close()). Затем выполняется self.OnCorrectComPort (событие).
Это то, что я вижу: Thread присоединяется к tr.join(), тогда self.OnCorrecComPort (event) выполняется, так как я вижу, что появляется окно с сообщением «PORT OPENED», я нажимаю OK, затем мой GUI получает CLEARED. Насколько я понимаю, это неправильно, кто-то, пожалуйста, поправьте меня.
Спасибо за ваш ответ - я не мог понять физику, что именно вы имеете в виду, я называю их в CallBack. Насколько я понимаю, wx также является Callback - что отличает его от time.sleep и FindCorrectComPORT. Разве я бы не назвал эти функции после вызова модуля wx. Даже если wx требует много времени, чтобы ответить, почему он не выполняет работу по очистке графического интерфейса пользователя в течение среднего времени. Буду признателен, если вы пойдете немного глубже. –
Не следует ли обрабатывать события wx до вызова этих функций? Мой time.sleep - не должен быть 5 секунд. Одна вторая работа –
Я отредактировал мое сообщение. События wx обрабатываются в mainloop. Вы не оставляете шанс на события. Плохо называть 'time.sleep' в системе с обратным вызовом: он замерзает все. Метод таймера намного лучше: wx обрабатывает его, и он может обновлять дисплей раньше. –