「Loading ...」を表示し、tkinterのボタンをクリックした後にスクリプトを実行するにはどうすればよいですか?

クリスティーナ周

「Loading ...」を表示して、ユーザーが待機している間にスクリプトを実行したいと思います。

キャンバスはループごとにのみ更新できること、およびボタンコマンドが呼び出されている間はキャンバスがフリーズすることを理解しています。

どうすればこれを修正できますか?

現在、表示されるテキストはありません。成功テキストは表示されます。

import tkinter as tk
import main


root = tk.Tk()  # create GUI instance
root.title('Exam Closeout')  # name GUI

def run_script():
    '''
    Run the script from main, that is, the data script.

    :return: void
    '''
    # show loading status: currently doesn't work, need to understand queue better
    current_text = tk.StringVar()
    current_text.set('Loading...')
    tk.Label(root, textvariable=current_text).grid(row=4, column=1, sticky='w')
    subject = entry_1.get() # grab subject from user input
    try:
        # call main
        main.test(subject)
        # show finish status
        current_text.set('Script successfully finished. You may exit out of this window now')
    except Exception as e:   # catch exceptions. currently doesn't show specific exception
        current_text.set("Error occurred. Try looking at documentation")


# label with instructions
tk.Label(root, text="Thank you for using me...").grid(row=1, column=1, sticky='w')

# label to show users where to enter exam
tk.Label(root, text="Enter exam code:").grid(row=2, column=1, sticky='w')

# blank box to enter exam into
entry_1 = tk.Entry(root,width=40)   # entry has to be its own line - for more, see below
entry_1.grid(row=2, column=2, columnspan=2)

# button to run script
tk.Button(root,text="Run", command=run_script).grid(row=3, column=3)

# start canvas
root.mainloop()

main.py

import time

def test(exam):
    time.sleep(5)
    print(exam)

重要な場合、主な方法は、実際にはデータフレームを取り込んで操作し、Excelデータセットをエクスポートするデータ分析スクリプトです。

マルティノー

update_idletasks()以下に示す場所でユニバーサルウィジェットメソッドへの呼び出しを追加します。

def run_script():
    '''
    Run the script from main, that is, the data script.

    :return: void
    '''
    # Show loading status.
    current_text = tk.StringVar()
    current_text.set('Loading...')
    tk.Label(root, textvariable=current_text).grid(row=4, column=1, sticky='w')
    subject = entry_1.get() # grab subject from user input
    try:
        root.update_idletasks()  #### ADD THIS LINE ####
        # call main
        main.test(subject)
        # show finish status
        current_text.set('Script successfully finished. '
                         'You may exit out of this window now')
    except Exception as e:  # Catch exceptions.
        current_text.set("Error occurred. Try looking at documentation")

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ