触发带有两个命令的按钮时会弹出额外的窗口

问题描述 投票:0回答:1
from tkinter import *
# global new_width
# global new_height
# global new_rectangles
rectangle_values=[]
x = 0
y = 0
k = 0

def open_window():
    global k
    top=Toplevel()
    top.title("Rectangles")
    top.geometry("300x600")

    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)
        rectangle_values.append(StringVar())
        en=Entry(top, textvariable=rectangle_values[i])
        en.grid(row=i,column=1)


    b3=Button(top, text="Save", width=12, command=save_content)
    b3.grid(row=int(rectangles.get())*2+1,column=0)
    b4=Button(top, text="Close", width=12, command=top.destroy)
    b4.grid(row=int(rectangles.get())*2+1,column=1)
    k = int(rectangles.get())

def save_sheetsize():
    global x
    global y
    x = float(e2.get())
    y = float(e1.get())

temp_recta=[]
def save_content():   
    for j in range(0,int(rectangles.get())*2):
            temp_recta.append(rectangle_values[j].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=lambda:(window.destroy(),open_window()))
b1.grid(row=3,column=1)

window.title("Rectangle Configuration")
window.geometry("300x600")
window.mainloop()

root=Tk()

l1=Label(root, text="Size of Sheet[Height]:")
l1.grid(row=0,column=0)

l2=Label(root, text="Size of Sheet[Width]:")
l2.grid(row=1,column=0)

# defining entries
height=StringVar()
e1=Entry(root, textvariable=height)
e1.grid(row=0,column=1)

width=StringVar()
e2=Entry(root, textvariable=width)
e2.grid(row=1,column=1)

b5=Button(root, text="Save", width=12, command=save_sheetsize)
b5.grid(row=2,column=0)
b6=Button(root, text="Close", width=12, command=root.destroy)
b6.grid(row=2,column=1)

root.title("Sheet Size")
root.geometry("300x600")
root.mainloop()

当我运行此代码时,我首先输入一个数字并按下调用open_window函数的按钮并销毁,一个名为tk的窗口随着open_window中的窗口弹出。当我关闭那个tk窗口时,我想要的另一个窗口也会关闭。我无法理解。如何避免弹出tk窗口?

python python-3.x tkinter jupyter
1个回答
0
投票

这只是您可以按照修复问题,修改,更新的示例。

from tkinter import *
# global new_width
# global new_height
# global new_rectangles

temp_recta = []

def save_content(top):
    top.destroy()
    for j in range(0, int(rectangles.get()) * 2):
        temp_recta.append(rectangle_values[j].get())

    root = Toplevel()

    l1 = Label(root, text="Size of Sheet[Height]:")
    l1.grid(row=0, column=0)

    l2 = Label(root, text="Size of Sheet[Width]:")
    l2.grid(row=1, column=0)

    # defining entries
    height = StringVar()
    e1 = Entry(root, textvariable=height)
    e1.grid(row=0, column=1)

    width = StringVar()
    e2 = Entry(root, textvariable=width)
    e2.grid(row=1, column=1)

    b5 = Button(root, text="Save", width=12, command=lambda: save_sheetsize(e1, e2, root))
    b5.grid(row=2, column=0)
    b6 = Button(root, text="Close", width=12, command=lambda: (root.destroy(), window.deiconify()))
    b6.grid(row=2, column=1)

    root.title("Sheet Size")

def save_sheetsize(e1, e2, root):
    global x
    global y
    x = float(e2.get())
    y = float(e1.get())
    root.destroy()
    window.deiconify()

rectangle_values = []
x = 0
y = 0
k = 0

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

    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)
        rectangle_values.append(StringVar())
        en = Entry(top, textvariable=rectangle_values[i])
        en.grid(row=i, column=1)

    b3 = Button(top, text="Save", width=12, command=lambda: save_content(top))
    b3.grid(row=int(rectangles.get()) * 2 + 1, column=0)
    b4 = Button(top, text="Close", 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.geometry("300x600")
window.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.