簡體   English   中英

_tkinter.TclError: 錯誤的窗口路徑名

[英]_tkinter.TclError: bad window path name

我正在制作一個涉及 tkinter 的應用程序,最終將涉及套接字。 我的代碼目前包括:

import tkinter as tk # imports tkinter module
from tkinter import * # imports tkinter module

a=tk.Tk()
a.title('Custodian Alert Tool')
List=['','','']
List.clear()

def Clear():
            for widget in a.winfo_children(): # clears the window for the next Page
                        widget.destroy()

def Home():
            Clear()
            Label(a,text='Welcome to the Custodian Alert Tool.').pack()
            Label(a,text='').pack()
            SubmitButton=tk.Button(a,text='Submit A Ticket',command=Submit)
            SubmitButton.pack()
            ExitButton=tk.Button(a,text='Exit',command=Exit)
            ExitButton.pack()
            a.mainloop()

def Submit():
            Clear()
            def Append1(): # the button calls this function when pressed
                        List.append(x.get())
                        Gender()
            Label(a,text='Which bathroom are you reporting for?').pack()
            f=tk.Frame(a)
            f.pack()
            x=tk.StringVar()
            E=tk.Entry(f,textvariable=x)
            E.grid(row=1,column=1)
            b1=tk.Button(f,text='Submit',command=Append1) # the error occurs after I click this button
            b1.grid(row=1,column=2)

def Gender():
            Clear()
            def Append2(y):
                        List.append(y)
                        Issue()
            Label(a,text='Boys or Girls?').pack()
            f=tk.Frame(a)
            f.pack()
            b1=tk.Button(f,text='Boys',command=Append2('Boys'))
            b1.grid(row=1,column=1)
            b2=tk.Button(f,text='Girls',command=Append2('Girls'))
            b2.grid(row=1,column=2)
def Issue():
            Clear()


def Exit():
            a.destroy()

Home()

但是,當我單擊“提交”功能下的 b1 按鈕時,我得到以下信息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1550, in __call__
    return self.func(*args)
  File "/Users/skor8427/Desktop/AlertClient.py", line 27, in Append1
    Gender()
  File "/Users/skor8427/Desktop/AlertClient.py", line 45, in Gender
    b1=tk.Button(f,text='Boys',command=Append2('Boys'))
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 2209, in __init__
    Widget.__init__(self, master, 'button', cnf, kw)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 2139, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: bad window path name ".4610182280"

這是我遇到的最大錯誤,我不知道從哪里開始。 有誰知道我能做什么?

當你這樣做時:

b1=tk.Button(f,text='Boys',command=Append2('Boys'))

它的行為與此完全相同:

result = Append2('Boys'))
b1=tk.Button(f,text='Boys',command=result)

Append2被調用時,它調用Issue這就要求Clear其銷毀所有在孩子們的a fa所以f被破壞。 這意味着您正在嘗試將b1創建為已被銷毀的小部件的子部件。 就是為什么您會收到錯誤“錯誤的窗口路徑名稱”——這個神秘的字符串是已被銷毀的小部件的名稱。

您需要將b1的構造修改為如下所示:

b1 = Button(f, text='Boys', command=lambda: Append2('Boys'))`

這將推遲Append2的調用,直到單擊按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM