Layar pemuatan sederhana di python Tkinter

Saya seorang pembelajar python pemula, khususnya tkinter.

Saya ingin membuat 'layar pemuatan' dari skrip python sederhana dan menutupnya setelah skrip berakhir.

Tetapi membuat jendela memerlukan fungsi mainloop yang berarti ia akan berputar tanpa batas atau menunggu interaksi pengguna (atau begitulah menurut saya) dan itu akan menghilangkan gagasan layar 'memuat'.

Saya mencoba sesuatu tetapi berakhir dengan (Masukkan Layar Pemuatan) -> (Layar pemuatan masih ada mainloop) -> (Tidak Dapat Menjalankan Skrip karena menunggu)

Yang saya inginkan secara detail adalah (Masukkan Loading Script) -> (Run Script) -> (Script berakhir) -> (Loading Screen destroy)

Saya mendapat banyak pengalaman dalam bahasa lain terutama Java tetapi Java hanya bisa mendeklarasikan sebuah frame -> menjalankan hal-hal lain setelahnya -> memanggil frame.dispose() dan hanya itu. Adakah tip atau saran untuk pelajar?

EDIT: Skrip sebenarnya adalah algoritma pemrosesan gambar yang terhubung ke database dan saya tidak bisa hanya menunggu atau tidur karena database dapat diperluas dan mungkin memakan waktu lebih lama dari waktu yang dialokasikan.


person Darrius    schedule 12.06.2018    source sumber
comment
Anda perlu menggunakan threading atau subproses.   -  person Konstantin    schedule 12.06.2018


Jawaban (1)


Sesuatu seperti ini mungkin cocok untuk Anda. Ini menciptakan jendela root, dan mendefinisikan fungsi task yang menghancurkan root sebagai hal terakhir yang dilakukannya. Dalam contoh ini, task hanya tidur selama dua detik, namun Anda akan mengganti panggilan sleep tersebut dengan kode apa pun yang ingin Anda jalankan.

Anda memasukkan fungsi task ke dalam antrian acara loop utama dengan root.after(200, task). Ini berarti kode tersebut pertama-tama akan membuat jendela root, tunggu 200 milidetik, lalu panggil task(), yang tertidur selama dua detik dan menghancurkan jendela. Setidaknya untuk contoh ini Anda memerlukan penundaan 200 milidetik sehingga loop utama memiliki cukup waktu untuk menggambar jendela sebelum panggilan sleep menghentikan semuanya (angkanya mungkin berbeda untuk Anda; tambah jika jendela tidak digambar dengan benar).

import tkinter as tk
from time import sleep

def task():
    # The window will stay open until this function call ends.
    sleep(2) # Replace this with the code you want to run
    root.destroy()

root = tk.Tk()
root.title("Example")

label = tk.Label(root, text="Waiting for task to finish.")
label.pack()

root.after(200, task)
root.mainloop()

print("Main loop is now over and we can do other stuff.")

Sunting: Menambahkan komentar ke kode.

person Dronir    schedule 12.06.2018
comment
terima kasih atas tanggapannya tetapi saya benar-benar ingin membuatnya sedinamis mungkin dan menghindari skenario waktunya. - person Darrius; 12.06.2018
comment
Saya tidak begitu yakin dengan maksud Anda, tapi ini tidak bergantung pada waktu mana pun yang digunakan dalam contoh saya. Panggilan sleep hanyalah pengganti tiruan untuk komputasi yang Anda ingin jendelanya tetap terbuka. Penundaan 200 ms dalam antrian hanya untuk memberi waktu bagi tk untuk merender jendela karena sleep jika tidak akan menggantungnya. - person Dronir; 12.06.2018
comment
Itu berhasil. Saya harus belajar cara menggunakannya dan pada awalnya tidak memahaminya. Terima kasih - person Darrius; 12.06.2018