2016-09-27 44 views
0

我正在开发我的第一个应用程序,并且一直在关注如何使用tkinter和python设置工作GUI的一些教程。我的应用程序首先播放启动画面动画,一旦完成,切换到“UserSetup”框架。我仍然忙于尝试重新编码播放此视频的功能,以便我可以将其作为一种方法(或任何其他作品)进行调用。我想知道的是,如果在播放此视频的主题停止后有办法检查该视频吗?现在播放的任何其他动画都是同时运行的,我不想那样做。我基本上只想让它继续下一组动画,或者一旦闪屏动画停止了。如何检查线程是否以Python结尾

这是一个相当多的代码....

# ====================== 
# 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() 

回答

0

我已经使用在过去is_alive()。在形式:

while thread_name.is_alive(): 
    pass 

这将等待线程在继续下一部分脚本之前完成。

希望这会有所帮助! Luke

+0

嗨卢克,thanx的提示!会给它一个去看看会发生什么:) – Ants

+0

嗨卢克,试过你的建议,但现在它给了我各种其他奇怪的错误。认为这可能与我没有将流(标签)函数重新编写为类方法的事实有关。首先尝试这个,然后看看它是否工作 – Ants

+0

你可以尝试'thread.join()',这会暂停当前的处理并等待已启动的线程完成。 – Joules

相关问题