2017-06-11 5 views
0

Ich mache jetzt ein Tkinter GUI-Programm Ich möchte eine Diashow anzeigen - def slide, wenn ich auf eine Schaltfläche - boldbutton in def GUI_PART klicken, aber in meinem Code, Diashow ist nicht funktionieren.tkinter: Slideshow-Funktion in einer Schaltfläche implementieren?

Bitte helfen.

class mainapp(): 
    def slide(self): 
     root1=Tk() 
     self.root1.geometry("+{}+{}".format(70, 100)) 
     title("a simple Tkinter slide show") 
     # delay in seconds (time each slide shows) 
     delay = 2.5 
     imageFiles=glob.glob('/home/imagefolder/*.png') 
     photos = [PhotoImage(file=fname) for fname in imageFiles] 
     button = Button(root1,command=root1.destroy) 
     button.pack(padx=5, pady=5) 
     for photo in photos: 
      button["image"] = photo 
      root1.update() 
      time.sleep(delay) 

    def GUI_PART(self, Master): 
     self.master = Master 
     Master.title("Start") 
     self.masterFrame = Frame(self.master) 
     self.masterFrame.pack() 
     ...   
     self.boldbutton = Button(self.tool3_frame, text="Slide show",command=self.slide) 
     self.boldbutton.pack(side=LEFT) 
+0

ist es jemand helfen, dieses Problem ?? – Kmin

+0

Sie möchten 'Tk()' nicht mehrmals in einem tkinter-Programm aufrufen. Erstellen Sie stattdessen ein ['tk.TopLevel'] (http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/topelevel.html) Fenster. Stellen Sie außerdem sicher, dass Sie die 'GUI_PART()' Methode aufrufen, nachdem Sie eine 'mainapp' Instanz erstellt haben. – martineau

Antwort

0

GUI-Toolkits sind ereignisgesteuerte und Tkinter ist keine Ausnahme.

Dies bedeutet, dass das Programm in mainloop() ausgeführt wird, und Sie können eine Schleife mit einem Ruhezustand nicht verwenden, um Bilder anzuzeigen.

Sie sollten eine Liste mit Bildpfaden in Ihrem Anwendungsobjekt speichern und die Methode after() verwenden. Außerdem würde ich die Anwendungsklasse von Tk erben lassen.

Beispiel (Python 3, in Python2 verwendet Tkinter statt tkinter):

import glob 
import tkinter as tk 
from PIL import Image, ImageTk 


class ImageViewer(tk.Tk): 

    def __init__(self): 
     """Create the ImageViewer.""" 
     # You can press q to quit the program. 
     self.bind_all('q', self.do_exit) 
     # Attributes for the image handling. 
     self.image_names=glob.glob('/home/imagefolder/*.png') 
     self.index = 0 
     self.photo = None 
     # We'll use a Label to display the images. 
     self.label = tk.Label(self) 
     self.label.pack(padx=5, pady=5) 
     # Delay should be in ms. 
     self.delay = 1000*2.5 
     # Display the first image. 
     self.show_image() 

    def show_image(self): 
     """Display an image.""" 
     # We need to use PIL.Image to open png files, since 
     # tkinter's PhotoImage only reads gif and pgm/ppm files. 
     image = Image.open(self.image_names[index]) 
     # We need to keep a reference to the image! 
     self.photo = ImageTk.PhotoImage(image) 
     self.index += 1 
     if self.index == len(self.image_names): 
      self.index = 0 
     # Set the image 
     self.label['image'] = self.photo 
     # Tell tkinter we want this method to be called again after a delay. 
     self.after(self.delay, next_image) 

    def do_exit(self, event): 
     """ 
     Callback to handle quitting. 

     This is necessary since the quit method does not take arguments. 
     """ 
     self.quit() 

root = ImageViewer() 
root.mainloop() 
+0

großartig! danke für Ihre Hilfe. – Kmin

Verwandte Themen