简体   繁体   English

如何防止Toplevel()打开另外两个窗口?

[英]How can I prevent Toplevel() from opening two additional windows?

I have a program that uses Tkinter and I'm trying to assign a command to a button in my root window that opens one additional window. 我有一个使用Tkinter的程序,我试图将命令分配给我的root窗口中的一个按钮,该按钮可打开另一个窗口。 I'm using Toplevel() , but whenever I click the button I've assigned the command to, two windows open, one with my root window's name and one with the name of the additional window I've assigned. 我正在使用Toplevel() ,但是每当我单击将命令分配给它的按钮时,就会打开两个窗口,一个带有我的root窗口的名称,另一个带有我分配的其他窗口的名称。

I've tried using .withdraw and .destroy , to hide or remove this extra root window, but nothing seems to be working. 我尝试使用.withdraw.destroy来隐藏或删除此额外的root窗口,但是似乎没有任何作用。

Here is my code: 这是我的代码:

import Tkinter
from Tkinter import *

root = Tk()
root.wm_title("VACS")

# # Top label # #

SetParameters = Label(text="Set Parameters", width=110, relief=RIDGE)
SetParameters.grid(row=1, column=0, columnspan=7, padx=5, pady=5)

# # Spatial freq settings # #

SpatialFreq = Label(text="Spatial Frequency", width=15, relief=RIDGE)
SpatialFreq.grid(row=3, column=0, padx=5, pady=5)

From1 = Label(text="from")
From1.grid(row=3, column=1, padx=5, pady=5)

Select1 = Spinbox(from_=0, to=10, width=25)
Select1.grid(row=3, column=2, padx=5, pady=5)

To1 = Label(text="to")
To1.grid(row=3, column=3, padx=5, pady=5)

Select2 = Spinbox(from_=0, to=10, width=25)
Select2.grid(row=3, column=4, padx=5, pady=5)

Steps = Label(text="in steps of")
Steps.grid(row=3, column=5, padx=5, pady=5)

Select3 = Spinbox(from_=0, to=10, width=25)
Select3.grid(row=3, column=6, padx=5, pady=5)

# # Contrast settings # #

Contrast = Label(text="Contrast", width=15, relief=RIDGE)
Contrast.grid(row=5, column=0, padx=5, pady=5)

From2 = Label(text="from")
From2.grid(row=5, column=1, padx=5, pady=5)

Select4 = Spinbox(from_=0, to=10, width=25)
Select4.grid(row=5, column=2, padx=5, pady=5)

To2 = Label(text="to")
To2.grid(row=5, column=3, padx=5, pady=5)

Select5 = Spinbox(from_=0, to=10, width=25)
Select5.grid(row=5, column=4, padx=5, pady=5)

Steps2 = Label(text="in steps of")
Steps2.grid(row=5, column=5, padx=5, pady=5)

Select6 = Spinbox(from_=0, to=10, width=25)
Select6.grid(row=5, column=6, padx=5, pady=5)

# # Test button # #

Test = Button(text="Begin Test", width=25, command=Top)
Test.grid(row=6, column=0, columnspan=7, pady=5)

# # Directory input window # #

def Top():
    Toplevel()
    Toplevel().wm_title("Directory")

root.mainloop()

If you click "Begin Test" in the root window, two extras pop up. 如果在root窗口中单击“开始测试”,则会弹出两个附加功能。 I only want the one that says "Directory." 我只想要一个说“目录”的目录。

Any ideas? 有任何想法吗?

You're creating two, since Toplevel() is the constructor call: 您正在创建两个,因为Toplevel()是构造函数调用:

Toplevel()
Toplevel().wm_title("Directory")

Instead, create one and save it: 而是创建一个并保存:

top = Toplevel()
top.wm_title("Directory")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM