Управление потоком приложения с использованием интерфейса GUI - PullRequest
0 голосов
/ 05 февраля 2020

(Заранее спасибо, если вы решите ответить. Извините, если я не могу четко описать содержание Приложения.)

В настоящее время я делаю Настольное приложение, используя Tkinter Python для моего gui интерфейс. У меня возникла проблема, связанная с потоком приложения.

Мое приложение

На главной странице моего приложения есть форма с несколькими текстовыми полями и флажками. Кнопка проверки работает как True или False Condition, где каждая кнопка проверки указывает, должна ли определенная функция c выполняться или нет. Чтобы сохранить значения кнопки проверки, словарь поддерживается с помощью ключей как LabelName и значений как True / False.

Код флажка

f1=tk.BoolVar()               #People tend to use IntVar() but i prefer BoolVar()
ttk.Label(text="func1")
ttk.Checkbutton(parent, variable=f1)
f2=tk.BoolVar()               
ttk.Label(text="func2")
ttk.Checkbutton(parent, variable=f2)
-------other such CheckButtons------------------

В форме есть кнопка отправки, при нажатии которой все данные вводятся в текстовое поле вместе с этими кнопками проверки. Основываясь на значениях true-false, вызываются функции, которые обрабатываются условиями if-else.

#submit button
ttk.Button(parent,text="Submit",command=onsubmit)
###########
def onsubmit():
    ----------statements to read data--------------
    dict['func1']=f1
    dict['func2']=f2
    #other statements
    -----------------------------------------------
    if dict['func1']:
        func1()
    if dict['func2']:
        func2()
    ---other if-else conditions---

Каждая функция - это отдельный модуль, который состоит либо из формы, либо из фрейма с графиками данных или matplotlib для визуализации данных. и выполнять другие операции с данными и графиками, которые помещены в root оконную раму.

Моя проблема

Я хочу, чтобы пользователь управлял потоком, давая ему кнопку «Далее» после выполнения каждой функции и затем переход к выполнению следующей функции на основе его ввода кнопки проверки. Программа должна подождать, пока пользователь не нажмет следующую кнопку, и после того, как он нажмет следующую кнопку, она должна выполнить следующую функцию, а затем снова подождать следующую кнопку.

Одно из решений: Использование fig.waitforbuttonpress ( ) было решением. Но я не нашел это надежным. Потому что даже щелчок мыши может пропустить выполнение функции. Но мне нужно специально назначить кнопку, с помощью которой пользователь может выбирать, когда переходить к следующей функции.

1 Ответ

0 голосов
/ 05 февраля 2020

Я не уверен, что понял, что делает ваш код, но вы могли бы сделать это примерно так:

next_button = ttk.Button(parent,text="Next",command=func1)

...

def func1():
    #do your stuff here        
    next_button.configure(command=func2)

Тогда вам нужно будет добавить последнюю строку кода ко всем функциям всегда переназначать кнопку.

Другой способ может быть:

process = 0

next_button = ttk.Button(parent,text="Next",command=next)

def next():
    global process
    process += 1
    if process == 1:
        func1()
    elif process == 2:
        func2()

    ...

    elif *last_function_reached*:
        process = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...