私は正しくロードするのに数秒かかるかもしれないメインのtkinterウィンドウを持っています。このため、メインクラスののinitメソッドが終了し、メインのtkinterアプリケーションが表示されるまでのスプラッシュ画面を表示したいと考えています。これはどのように達成できますか?Tkinter __init__が終了するまで、スプラッシュ画面を表示してメイン画面を非表示にします。
スプラッシュスクリーンコード:
from Tkinter import *
from PIL import Image, ImageTk
import ttk
class DemoSplashScreen:
def __init__(self, parent):
self.parent = parent
self.aturSplash()
self.aturWindow()
def aturSplash(self):
self.gambar = Image.open('../output5.png')
self.imgSplash = ImageTk.PhotoImage(self.gambar)
def aturWindow(self):
lebar, tinggi = self.gambar.size
setengahLebar = (self.parent.winfo_screenwidth()-lebar)//2
setengahTinggi = (self.parent.winfo_screenheight()-tinggi)//2
self.parent.geometry("%ix%i+%i+%i" %(lebar, tinggi, setengahLebar,setengahTinggi))
Label(self.parent, image=self.imgSplash).pack()
if __name__ == '__main__':
root = Tk()
root.overrideredirect(True)
progressbar = ttk.Progressbar(orient=HORIZONTAL, length=10000, mode='determinate')
progressbar.pack(side="bottom")
app = DemoSplashScreen(root)
progressbar.start()
root.after(6010, root.destroy)
root.mainloop()
メインTkinterのウィンドウ最小実施例:
import tkinter as tk
root = tk.Tk()
class Controller(tk.Frame):
def __init__(self, parent):
'''Initialises basic variables and GUI elements.'''
frame = tk.Frame.__init__(self, parent,relief=tk.GROOVE,width=100,height=100,bd=1)
control = Controller(root)
control.pack()
root.mainloop()
EDIT:それは.withdraw()を使用してロードを完了するまで、私は、メインウィンドウを使用することができます。 deiconify()メソッド。しかし、私の問題は、これら2つのメソッド呼び出しの間にスプラッシュ画面を実行する方法が見つからないことです。
これはおそらくXYの問題です。なぜあなたのメインウィンドウはロードに数分かかるのですか?読み込み時間などを引き起こしている '__init__'の関数を実行していますか? – Pythonista