Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.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 调用tk.tk()一次,但意外得到两个窗口?_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 调用tk.tk()一次,但意外得到两个窗口?

Python 调用tk.tk()一次,但意外得到两个窗口?,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在使用python 3.8.5和tkinter 8.6。我正在学习使用tkinter。我试图制作一个简单的表单,但由于某些原因,当我运行代码时,我得到了两个窗口。其中一个窗口包含了我所期望的所有细节,但是还有一个未被实现的未调用窗口,其中没有任何内容。我无法从我的代码中看出为什么还有第二个窗口,因为我只有一行调用window.mainloop(),并且我只创建了一个窗口变量 import tkinter as tk WIDTH=50 HEIGHT=1 BG="white"

我正在使用python 3.8.5和tkinter 8.6。我正在学习使用tkinter。我试图制作一个简单的表单,但由于某些原因,当我运行代码时,我得到了两个窗口。其中一个窗口包含了我所期望的所有细节,但是还有一个未被实现的未调用窗口,其中没有任何内容。我无法从我的代码中看出为什么还有第二个窗口,因为我只有一行调用
window.mainloop()
,并且我只创建了一个窗口变量

import tkinter as tk

WIDTH=50
HEIGHT=1
BG="white"
FG="black"

COMPONENTS_MAP = (
    {"label":"Name","type":"text"},
    {"label":"Description","type":"text_area"},
    {"type":"submit"}
)
    
COMPONENTS = []

for mapping in COMPONENTS_MAP:
    if mapping["type"] == "text_area":
        COMPONENTS.append(
            tk.Label(
                text=mapping["label"],
                foreground=FG,
                background=BG,
                width=WIDTH
            )
        )
        COMPONENTS.append(
            tk.Text(
                fg=FG,
                bg=BG,
                width=WIDTH,
                height=3
            )
        )
    if mapping["type"] == "text":
        COMPONENTS.append(
            tk.Label(
                text=mapping["label"],
                foreground=FG,
                background=BG,
                width=WIDTH
            )
        )
        COMPONENTS.append(
            tk.Entry(
                fg=FG,
                bg=BG,
                width=WIDTH
            )
        )
    if mapping["type"] == "submit":
        COMPONENTS.append(
            tk.Button(
                text="Submit",
                width=WIDTH,
                height=HEIGHT,
                bg=BG,
                fg=FG
            )
        )

window = tk.Tk()

for component in COMPONENTS:
    component.pack()

window.mainloop()
看起来像这样


在初始化小部件之后,您可以初始化
窗口。移动
window=tk.tk()
开始您的代码(例如在导入之后)。

在初始化小部件之后初始化
window
。将
window=tk.tk()
移动到代码的开头(例如,在导入之后)。

在调用
tk()
之前,您正在创建各种小部件-如果没有小部件居住的
tk
实例,这是不可能的,因此会自动为您创建一个小部件。您需要将您的
Tk()
调用向上移动,以便这是第一次进行Tkinter调用。谢谢您解决了这个问题。如果你回复我,我会给你解决方案。在调用
Tk()
之前,你正在创建各种小部件-如果没有
Tk
的实例,小部件就无法生存,因此会自动为你创建一个小部件。您需要将您的
Tk()
调用向上移动,以便这是第一次进行Tkinter调用。谢谢您解决了这个问题。如果你回复我,我会给你答案。