Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x tkinter中包含类的新窗口为空_Python 3.x_Tkinter_Ttk - Fatal编程技术网

Python 3.x tkinter中包含类的新窗口为空

Python 3.x tkinter中包含类的新窗口为空,python-3.x,tkinter,ttk,Python 3.x,Tkinter,Ttk,我有一些测试代码,它定义了几个窗口和函数(一个用于显示框架,一个用于新窗口)。我在创建新的_窗口函数时遇到了一个错误,因为它没有打开指定的窗口,而是打开了一个空白窗口。我认为这是因为我在与主类相关的类中定义了窗口,框架在主类中定义,但窗口不是,但我担心我对如何调试迷茫了 非常感谢任何帮助 import tkinter as tk from tkinter import ttk from tkinter.filedialog import askopenfilename class Random

我有一些测试代码,它定义了几个窗口和函数(一个用于显示框架,一个用于新窗口)。我在创建新的_窗口函数时遇到了一个错误,因为它没有打开指定的窗口,而是打开了一个空白窗口。我认为这是因为我在与主类相关的类中定义了窗口,框架在主类中定义,但窗口不是,但我担心我对如何调试迷茫了

非常感谢任何帮助

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()
应该是

def new_window(self, cont):
    window = tk.Toplevel(self)
    frame = cont(window, window) # cont = NewWin
    frame.pack()
但框架中的按钮不起作用。新窗口没有
show\u frame()
方法

也许如果你使用

    frame = cont(window, self) # self

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

TopLevel
始终创建空窗口-代码正常工作。现在您必须将
NewWin
frame放入此窗口。谢谢,这非常有用!