Python tkinter回调

时间:2015-12-06 16:35:49

标签: python tkinter

我有一个带有一组框架的容器,它为我提供了两个页面(主页面和信息页面。)按钮用于导航页面。 一切正常。

我已经定义了一个删除操作系统文件夹的功能。 (shutil.rmtree)这个函数应该由主页面上的我的按钮2调用,但是它会崩溃并且不起作用。

 import tkinter as tk
 import shutil
 from tkinter import *


 TITLE_FONT = ("Helvetica", 18, "bold")


 class App(tk.Tk):

     def __init__(self, *args, **kwargs):
         tk.Tk.__init__(self, *args, **kwargs)

         # the container is where we'll stack a bunch of frames
         # on top of each other, then the one we want visible
         # will be raised above the others
         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 (MainPage, InfoPage,):
             frame = F(container, self)
             self.frames[F] = frame
             # put all of the pages in the same location;
             # the one on the top of the stacking order
             # will be the one that is visible.
             frame.grid(row=0, column=0, sticky="nsew")

         self.show_frame(MainPage)

     def show_frame(self, c):
         '''Show a frame for the given class'''
         frame = self.frames[c]
         frame.tkraise()


 class MainPage(tk.Frame):

     def callback(self):
         shutil.rmtree('C:\Test', ignore_errors=False)

     def __init__(self, parent, controller):
         tk.Frame.__init__(self, parent)
         self.controller = controller
         photo = PhotoImage(file='C:\Logo.gif')
         label = Label(self, image=photo)
         label.Image = photo
         label.pack(side=TOP)
         button1 = tk.Button(self, text="Info!",
                        command=lambda: controller.show_frame(InfoPage))
         button1.pack(side=LEFT, padx=5, pady=5)
         button2 = tk.Button(self, text="Clean!", command=callback)
         button2.pack(side=RIGHT, padx=5, pady=5)


 class InfoPage(tk.Frame):

     def __init__(self, parent, controller):
         tk.Frame.__init__(self, parent)
         self.controller = controller
         label = tk.Label(self, text="Info Page", font=TITLE_FONT)
         label.pack(side="top", fill="x", pady=10)
         button = tk.Button(self, text="Back",
                            command=lambda: controller.show_frame(MainPage))
         button.pack()


 if __name__ == "__main__":
     app = App()
     app.mainloop()

0 个答案:

没有答案