WX python эквивалентно задачам обновления tkinter - PullRequest
0 голосов
/ 08 февраля 2020

Я пишу функциональный, а не классовый код, потому что мои приложения представляют собой простые электромеханические формы управления. Я использую tkinter GUI для управления серией из 4-х ступенчатых двигателей вращения и по модулю для определения следующего шага. Вы вводите количество циклов, которое хотите запустить двигатели, и нажимаете go. Они go CW, CCW для 'N' шагов, пока счетчик не достигнет числа циклов. Я наблюдаю за кнопкой отмены и использую root .updateidletasks (), чтобы проверить, была ли нажата кнопка отмены, предотвращающая блокировку кода запуска двигателя.

Вот пример кода tkinter:

    while ((StepCounter < steps) and (stop == False)):
    pin = StepCounter % 4

    if(direction == True):      
        if pin == 0:
            Step1()
            time.sleep(StepTime)
        elif pin == 1:
            Step2()
            time.sleep(StepTime)
        elif pin == 2:
            Step3()
            time.sleep(StepTime)
        elif pin == 3:
            Step4()
            time.sleep(StepTime)
    if(direction == False): 
        if pin == 0:
            Step3()
            time.sleep(StepTime)
        elif pin == 1:
            Step2()
            time.sleep(StepTime)
        elif pin == 2:
            Step1()
            time.sleep(StepTime)
        elif pin == 3:
            Step4()
            time.sleep(StepTime)

    root.update_idletasks()
    root.update()

    if stop == True:
        StopALL()
        break;

    StepCounter += 1

Что эквивалентно updateidletasks () в wx. python

Рольф - так я и думал. У меня есть кнопка, которая переворачивает флаг с ложного на истинное. вот l oop, который блокирует. Я уверен, что в моей логике c есть что-то действительно глупое, чего я не вижу.

def run(event):
    count = 0
    abort = False
    rl = ctrl_txt_rl.GetValue()
    print ('Abort button state = ', haltBtn.GetValue())
    while count < int(rl) and (abort == False):
        count = count
        print ("Count = ", count)
        #do some stuff
        time.sleep(1)
        count = count + 1
    print ("Run Stopped")
    return

OK Проблема решена. Я добавил вызов wx.Yield () в l oop, который обновляет GUI и фиксирует нажатие кнопки. Довольно прямая корреляция с updateidletasks в tkinter, которая ломает время l oop. Для меня это выглядит проще, чем многопоточность, поскольку мое приложение довольно простое.

    count = 0
    abort = False
    rl = ctrl_txt_rl.GetValue()
    print ('Abort button state = ', haltBtn.GetValue())
    while count < int(rl) and haltBtn.GetValue() == False:
        count = count
        print ("Count = ", count)
        print ('Abort button state = ', haltBtn.GetValue())
        time.sleep(1)
        wx.Yield()
        count +=1

Спасибо

...