Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 合并两个窗口,其中第二个窗口依赖于第一个窗口_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 合并两个窗口,其中第二个窗口依赖于第一个窗口

Python 合并两个窗口,其中第二个窗口依赖于第一个窗口,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,第一个窗口用于显示矩形的数量。它定义了第二个窗口中输入框的数量。我想创建一个包含要输入的矩形数的窗口,当单击“提交”按钮时,第二个窗口的内容应显示在矩形数和“提交”按钮下方,以便我可以看到输入的矩形数。基本上,尝试使所有内容都显示在一个窗口中。 注意:代码是可验证的 from tkinter import * rectangle_values = [] k = 0 def open_window(): window.withdraw() global k top =

第一个窗口用于显示矩形的数量。它定义了第二个窗口中输入框的数量。我想创建一个包含要输入的矩形数的窗口,当单击“提交”按钮时,第二个窗口的内容应显示在矩形数和“提交”按钮下方,以便我可以看到输入的矩形数。基本上,尝试使所有内容都显示在一个窗口中。 注意:代码是可验证的

from tkinter import *

rectangle_values = []
k = 0

def open_window():
    window.withdraw()
    global k
    top = Toplevel()
    top.title("Rectangles")

    for i in range(0, int(rectangles.get()) * 2):
        if (i % 2) == 0:
            l4 = Label(top, text="Size of rectangle:")
            l4.grid(row=i, column=0)
        en = Entry(top)
        en.grid(row=i, column=1)

    b4 = Button(top, text="Back", width=12, command=lambda: (top.destroy(), window.deiconify()))
    b4.grid(row=int(rectangles.get()) * 2 + 1, column=1)
    k = int(rectangles.get())

window = Tk()

l3 = Label(window, text="Number of Rectangles:")
l3.grid(row=0, column=0)

# defining entries
rectangles = StringVar()
e3 = Entry(window, textvariable=rectangles)
e3.grid(row=0, column=1)

# Defining buttons
b1 = Button(window, text='Submit', width=12, command=open_window)
b1.grid(row=3, column=1)

window.title("Rectangle Configuration")
window.mainloop()
您可以使用小部件在一个窗口中完成所有操作

from tkinter import *

rectangle_values = []
k = 0

def open_window(rectangles):
    global k
    window.title('Rectangles')
    print(rectangles)
    for i in range(0, int(rectangles) * 2):
        if (i % 2) == 0:
            l4 = Label(frame2, text="Size of rectangle:")
            l4.grid(row=i, column=0)
        en = Entry(frame2)
        en.grid(row=i, column=1)

    frame2.tkraise()

    b4 = Button(frame2, text="Back", width=12, command=lambda: (frame1.tkraise(), window.title('Rectangle Configuration')))
    b4.grid(row=int(rectangles) * 2 + 1, column=1)
    k = int(rectangles)

window = Tk()

frame1 = Frame(window)
frame1.grid(row = 0, column = 0, sticky = 'nsew')
frame2 = Frame(window)
frame2.grid(row = 0, column = 0, sticky = 'nsew')

frame1.tkraise()

l3 = Label(frame1, text="Number of Rectangles:")
l3.grid(row=0, column=0)

# defining entries
rectangles = StringVar()
e3 = Entry(frame1, textvariable=rectangles)
e3.grid(row=0, column=1)

# Defining buttons
b1 = Button(frame1, text='Submit', width=12, command=lambda: open_window(rectangles.get()))
b1.grid(row=3, column=1)

window.title("Rectangle Configuration")
window.mainloop()
您可以使用小部件在一个窗口中完成所有操作

from tkinter import *

rectangle_values = []
k = 0

def open_window(rectangles):
    global k
    window.title('Rectangles')
    print(rectangles)
    for i in range(0, int(rectangles) * 2):
        if (i % 2) == 0:
            l4 = Label(frame2, text="Size of rectangle:")
            l4.grid(row=i, column=0)
        en = Entry(frame2)
        en.grid(row=i, column=1)

    frame2.tkraise()

    b4 = Button(frame2, text="Back", width=12, command=lambda: (frame1.tkraise(), window.title('Rectangle Configuration')))
    b4.grid(row=int(rectangles) * 2 + 1, column=1)
    k = int(rectangles)

window = Tk()

frame1 = Frame(window)
frame1.grid(row = 0, column = 0, sticky = 'nsew')
frame2 = Frame(window)
frame2.grid(row = 0, column = 0, sticky = 'nsew')

frame1.tkraise()

l3 = Label(frame1, text="Number of Rectangles:")
l3.grid(row=0, column=0)

# defining entries
rectangles = StringVar()
e3 = Entry(frame1, textvariable=rectangles)
e3.grid(row=0, column=1)

# Defining buttons
b1 = Button(frame1, text='Submit', width=12, command=lambda: open_window(rectangles.get()))
b1.grid(row=3, column=1)

window.title("Rectangle Configuration")
window.mainloop()

您可以将第一个“窗口”放置在一个框架中,将第二个“窗口”放置在另一个框架中,然后在验证矩形数量后创建第二个:

注意:我添加了一个默认值,以便验证和清空条目不会引发错误,并在验证不同条目时重置了第二帧

import tkinter as tk


class NumRectFrame(tk.Frame):

    def __init__(self, master):
        super().__init__(master)
        self.master = master
        self.label = tk.Label(self, text="Number of Rectangles:")
        self.label.grid(row=0, column=0)

        self.num_rectangles = tk.IntVar()
        self.num_rectangles_entry = tk.Entry(self, textvariable=self.num_rectangles)
        self.num_rectangles_entry.grid(row=0, column=1)
        self.num_rectangles_entry.insert(tk.END, 0)

        self.btn = tk.Button(self, text='validate', 
                             command=lambda: self.master.get_num_rect(int(self.num_rectangles_entry.get())))
        self.btn.grid(row=1, column=1)


class RectFrame(tk.Frame):

    def __init__(self, master, num_rect=0):
        super().__init__(master)
        self.master = master
        self.num_rect = num_rect
        for idx in range(self.num_rect * 2):
            if idx % 2 == 0:
                tk.Label(self, text="Size of rectangle:").grid(row=idx, column=0)
            tk.Entry(self).grid(row=idx, column=1)


class App(tk.Tk):

    def __init__(self):
        super().__init__()
        self.title('Num Rectangles')
        self.num_rect_fm = NumRectFrame(self)
        self.num_rect_fm.pack()

    def get_num_rect(self, val=0):
        try:
            self.rect_fm.destroy()
        except AttributeError:
            pass
        self.rect_fm = RectFrame(self, num_rect=val)
        self.rect_fm.pack()


app = App()
app.mainloop()

您可以将第一个“窗口”放置在一个框架中,将第二个“窗口”放置在另一个框架中,然后在验证矩形数量后创建第二个:

注意:我添加了一个默认值,以便验证和清空条目不会引发错误,并在验证不同条目时重置了第二帧

import tkinter as tk


class NumRectFrame(tk.Frame):

    def __init__(self, master):
        super().__init__(master)
        self.master = master
        self.label = tk.Label(self, text="Number of Rectangles:")
        self.label.grid(row=0, column=0)

        self.num_rectangles = tk.IntVar()
        self.num_rectangles_entry = tk.Entry(self, textvariable=self.num_rectangles)
        self.num_rectangles_entry.grid(row=0, column=1)
        self.num_rectangles_entry.insert(tk.END, 0)

        self.btn = tk.Button(self, text='validate', 
                             command=lambda: self.master.get_num_rect(int(self.num_rectangles_entry.get())))
        self.btn.grid(row=1, column=1)


class RectFrame(tk.Frame):

    def __init__(self, master, num_rect=0):
        super().__init__(master)
        self.master = master
        self.num_rect = num_rect
        for idx in range(self.num_rect * 2):
            if idx % 2 == 0:
                tk.Label(self, text="Size of rectangle:").grid(row=idx, column=0)
            tk.Entry(self).grid(row=idx, column=1)


class App(tk.Tk):

    def __init__(self):
        super().__init__()
        self.title('Num Rectangles')
        self.num_rect_fm = NumRectFrame(self)
        self.num_rect_fm.pack()

    def get_num_rect(self, val=0):
        try:
            self.rect_fm.destroy()
        except AttributeError:
            pass
        self.rect_fm = RectFrame(self, num_rect=val)
        self.rect_fm.pack()


app = App()
app.mainloop()

对不起,如果我的问题不清楚的话。但是我希望矩形的数量、提交按钮和矩形的大小应该显示在它们下面。@devinmarjan您仍然可以使用框架小部件。只需将它们一个接一个地网格化,并在单击Submit按钮后显示frame2,就可以了。我们可以限制帧大小而只使用滚动条吗?@DevinMaharjan要限制帧大小,请查看[(网格管理器)(rowspan、columnspan、rowconfigure、columnconfigure等)。我不确定你需要用滚动条更改什么。但是,如果只是放置,网格管理器应该是你要找的。我们可以把整个窗口的滚动条放在一起吗?这比仅仅一个框架更有意义。我们可以这样做吗?抱歉,如果我的问题不清楚。但是我想要矩形的数量,提交按钮,矩形的大小应显示在其下方。@devinmarjan您仍然可以使用框架小部件。只需将它们一个置于另一个之下,并在单击“提交”按钮后显示frame2,就可以了。我们可以限制框架大小并只使用滚动条吗?@devinmarjan要限制框架大小,请查看[(网格管理器)(rowspan、columnspan、rowconfigure、columnconfigure等)。我不确定您需要对滚动条进行哪些更改。但是,如果只是放置,网格管理器应该是您需要的。我们可以将整个窗口中的滚动条放在一起吗?这比仅用于帧更有意义。我们可以这样做吗?