0
私は最初のアプリを開発しています。tkinterとpythonを使って動作するGUIを設定する方法についていくつかのチュートリアルを続けてきました。私のアプリケーションはスプラッシュスクリーンアニメーションを再生することから始まり、完了すると "UserSetup"フレームに切り替わります。私はまだこのビデオを再生する関数を再コーディングしようとして忙しいので、メソッドとして呼び出すことができます。私が知りたいのは、このビデオを再生しているスレッドが停止しているかどうかを確認する方法があるかどうかです。今再生されている他のアニメーションは同時に実行され、私はそれを望んでいません。基本的には、次の一連のアニメーションや、一度スプラッシュ画面のアニメーションが停止した場合にのみ続行することが必要です。スレッドがPythonで終了しているかどうかを確認する方法
それはの形では、私が過去にis_alive()
使用しているコードのかなり....
# ======================
# imports
# ======================
import tkinter as tk
import imageio
import threading
from PIL import Image, ImageTk
LARGE_FONT = ("Segoe UI", 18)
# =======================
# INITIALISATION - MAIN
# =======================
class MyApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack(side='top', fill='both', expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (SplashScreen, UserSetup, TimerSetup):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky='nsew')
self.show_frame(SplashScreen)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
# ======================
# PAGES
# ======================
""" To add new pages, just create a page class which inherits from tk.Frame,
add it to the dictionary, and add buttons for navigation """
class SplashScreen(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
video_name = "img//splash.avi" # This is your video file path
video = imageio.get_reader(video_name)
def stream(label):
for image in video.iter_data():
frame_image = ImageTk.PhotoImage(Image.fromarray(image))
label.config(image=frame_image)
label.image = frame_image
controller.show_frame(UserSetup)
def forget():
my_label.pack_forget()
my_label = tk.Label(self)
my_label.pack()
my_label.after(ms=15000, func=forget)
thread = threading.Thread(target=stream, args=(my_label,))
thread.daemon = 1
thread.setName("splash")
thread.start()
print(thread.getName())
class UserSetup(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
class TimerSetup(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
# ======================
# INITIALISATION (MAIN)
# ======================
app = MyApp()
#app.overrideredirect(True)
app.mainloop()
こんにちはルーク、チップのための高校!それを行って何が起こるか見てみましょう:) – Ants
こんにちはルーク、あなたの提案を試してみましたが、今それは私にあらゆる種類の奇妙なエラーを与えています。これは、クラスメソッドとしてストリーム(ラベル)関数をまだ書き換えていないという事実と関係していると思います。最初にこれを試してから動作するか確認してください。 – Ants
'thread.join()'を試すと、現在の処理を一時停止し、開始したスレッドが終了するのを待ちます。 – Joules