2015-12-02 57 views
0

我有一些测试代码,它定义了几个窗口和函数(一个用于显示框架,一个用于新窗口)。我有一个bug创建new_window函数,因为它不打开指定的窗口,而是打开一个空白的窗口。我认为这是因为我已经在与主类有关的类中定义了窗口,并且在其中定义了框架,但是窗口不是,但是我担心在调试方面我很遗憾。tkinter类中的新窗口为空

任何帮助非常感谢!

import tkinter as tk 
from tkinter import ttk 
from tkinter.filedialog import askopenfilename 

class Randomize(tk.Tk): 

    def __init__(self, *args, **kwargs): 

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

     tk.Tk.wm_title(self, "Randomize those names!") 

     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 (HomeWindow, NewWin): 

      frame = F(container, self) 
      self.frames[F] = frame 
      frame.grid(row=0, column=0, sticky="nsew") 

     self.show_frame(HomeWindow) 

    def show_frame(self, cont): 
     frame = self.frames[cont] 
     frame.tkraise() 

##trying to create a new window instead of just changing the original one   
    def new_window(self, cont): 
     window = tk.Toplevel(self) 
     window.tkraise() 

class HomeWindow(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self,parent) 

     label = ttk.Label(self, text="Choose a File and Start") 
     label.pack(pady=10,padx=10) 

##calls NewWin in a new frame but the same window, works  
     button = ttk.Button(self, text="File", 
          command=lambda: controller.show_frame(NewWin)) 
     button.pack() 
##should call NewWin through new_window, instead opens blank window  
     button2 = ttk.Button(self, text="New Window", 
          command=lambda: controller.new_window(NewWin)) 
     button2.pack() 

class NewWin(tk.Frame): 

    def __init__(self, parent, controller): 
     tk.Frame.__init__(self, parent) 
     label = ttk.Label(self, text="NewWindow") 
     label.pack(pady=10,padx=10) 

     button1 = ttk.Button(self, text="Back to Home", 
          command=lambda: controller.show_frame(HomeWindow)) 
     button1.pack() 

app = Randomize() 
app.mainloop() 
+0

'TopLevel'总是创建空窗口 - 代码正常工作。现在你必须在这个窗口中放入NewWin框架。 – furas

回答

0

应该

def new_window(self, cont): 
    window = tk.Toplevel(self) 
    frame = cont(window, window) # cont = NewWin 
    frame.pack() 

但在帧按钮将无法正常工作。新窗口没有show_frame()方法。

也许如果你使用

frame = cont(window, self) # self 

然后在新的窗口按钮,将在主窗口中更改框架。

+0

谢谢,这非常有帮助! – glstz