У меня есть gui wxPython, который контролирует некоторое оборудование. Мне нужна кнопка для отключения во время работы функции. Эта функция также принимает значение аргументаКак правильно наследовать значения в классе потоков с помощью wxPython
давайте говорить, что у меня есть эта функция, которая привязана к нажатию кнопки:
def button_press(self, event):
in_val = self.num_in.GetValue() #grabs a value from a NumCtrl
TheThread(in_val) #initiates the thread with argument
btn = event.GetEventObject()
btn.Disable() #disables button
эта функция переходит к следующему классу резьбы:
class TheThread(Thread):
def __init__(self, in_val):
"""Init Worker Thread Class."""
Thread.__init__(self)
self.run(in_val)
def run(self, in_val):
print val
time.sleep(5)
wx.CallAfter(Publisher.sendMessage, "ctrl")
"""
threadsafe method to call a pub.subscribe that runs a
function to re-enable button
"""
Этот работает неправильно, так как gui зависает во время периода запуска функции, и кнопка не отключается должным образом.
Как правильно наследовать этот аргумент, чтобы позволить ему работать правильно? Возможно, что-то связано с методом self.start()?
Спасибо! Итак, я думаю, что в случае потоковой передачи вы не передаете значение аргумента через следующую функцию, а вместо этого передаете его как self.var в функцию? Для этого есть причина? –
@ supremus_58 right, метод 'run' не принимает никаких аргументов. Однако, если вы передаете целевую функцию, вы можете также предоставить аргументы, а метод 'Thread.run' по умолчанию будет вызывать целевой вызываемый с помощью аргументов, которые вы предоставляете. 't = Thread (target = my_func, args = (" arg1 "," arg2 "), kwargs = {" kwarg1 ":" val "})' 't.start()' – GP89