Python: Bad Window Pfad Name bei Verwendung von deiconify

Ich habe dieses Problem mit einem Python-Programm Ich mache wo, wenn ich ein TopLevel-Fenster, in diesem Fall mein Hilfemenü, dann dann zurückziehen dann versuchen, es wieder anzuzeigen, bekomme ich den folgenden Fehler

Exception in Tkinter callback Traceback (most recent call last): File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__ return self.func(*args) File "C:\Users\****\Documents\GitHub\ProjectName\ProjectName\GUI.py", line 60, in displayHelp self.helpMenu.display(); File "C:\Users\****\Documents\GitHub\ProjectName\ProjectName\HelpMenu.py", line 35, in display self.deiconify(); File "C:\Python34\lib\tkinter\__init__.py", line 1646, in wm_deiconify return self.tk.call('wm', 'deiconify', self._w) _tkinter.TclError: bad window path name ".60000336" 

Der Fehler ist zuerst passiert, als ich mich aus HelpMenu.py zurückzog und deiconify verwende, um es aus der GUI.py-Datei wieder anzuzeigen. Seitdem habe ich versucht, mehrere Möglichkeiten, um das Problem zu beheben, einschließlich Aufrufen von deiconify aus HelpMenu.py und Aktualisierung der Kopie der Hilfe-Menü in der GUI gespeichert, wenn ich es zurückziehen. Ich laufe Python 3.4.2

  • Pandas: Berechnete Spalte basierend auf Werten in einer Spalte
  • Os.environ ['http_proxy'] nicht funktioniert [duplizieren]
  • Python raw_input () Begrenzung mit Mac OS X Terminal?
  • Multiprocessing.Array Summing Problem
  • Python (oder numpy) Äquivalent des Spiels in R
  • Wie man ganzzahlige Inter-Ankunftszeiten mit random.expovariate () in python generiert
  • Ich habe bereits umfangreiche Recherchen online gemacht und es versäumt, eine Lösung für mein Problem zu finden. Ich habe andere Erwähnungen von diesem Fehler gefunden, aber sie haben sich entweder nicht auf meine Situation bezogen oder ihre Lösungen funktionierten nicht.

    Hier ist der gesamte Code für die HelpMenu.py gefolgt von einem Auszug aus GUI.py, der die Funktionalität behält, um den Fehler zu reproduzieren, aber hat anderen Code entfernt.

     #!/usr/bin/python try: from Tkinter import * except ImportError: from tkinter import * class HelpMenu(Toplevel): def __init__(self, parent, observer): Toplevel.__init__(self); self.observer = observer;#Observer is the GUI, this is here just so I can update the GUI when I withdraw this window self.setup(); self.withdraw(); self.protocol('WM_DELETE_WINDOW', self.quit());#Changes the close button to just hide the window def setup(self): self.columnconfigure(0,weight=1); w = 400;#Sets up the window position on the screen h = 150; sw = self.winfo_screenwidth(); sh = self.winfo_screenheight(); x=(sw-w)/2; y =(sh-h)/2; self.update(); self.geometry('%dx%d+%d+%d' % (w,h,x,y)); self.resizable(width=0, height=0); self.grid(); self.title("Help Menu"); def quit(self):#Hides the window self.withdraw(); self.observer.updateHelp(self); def display(self):#Re-displays the window self.deiconify(); 

    Hier ist Code von GUI.py genommen und geändert, um nur den Code zu haben, der benötigt wird, um das Problem zu reproduzieren.

      #!/usr/bin/python #Allows compatibility with any version of Python by checking for both versions of Tkinter try: from Tkinter import * except ImportError: from tkinter import * #Imports the AutoCompleteEntry from HelpMenu import HelpMenu class UI(Tk): def initialize(self): #Handles setting up most of the GUI w = 500;#Window width h = 500;#Window height sw = self.winfo_screenwidth();#Gets screen width sh = self.winfo_screenheight();#Gets screen height x=(sw-w)/2;#Calculates the x position for the left side of the window that allows it to be placed in the center of the screen y =(sh-h)/2;#Calculates the y position for the top of the window that allows it to be placed in the center of the screen self.update();#Forces and update on the window self.geometry('%dx%d+%d+%d' % (w,h,x,y));#Sets the windows width, height and position self.minsize(int(w),int(h/2));#Sets the minimum size of the window self.configureMenu(); def updateHelp(self, helpMenu): self.helpMenu=helpMenu; def displayHelp(self): self.helpMenu.display(); def configureMenu(self): #Handles configuring and setting up the menus menu = Menu(self);#Setup the menu bar menu.add_command(label="Help",command=self.displayHelp); self.config(menu=menu); def __init__(self, parent): #Handles the initial call to create a GUI Tk.__init__(self,parent);#Parent constructor self.parent = parent;#Store the parent self.initialize();#Initilize the GUI self.helpMenu = HelpMenu(self, self); self.mainloop();#Start the main loop if __name__ == "__main__": import sys main = UI(None); 

    Eine letzte Anmerkung, ich bin etwas neu in Python, also könnte es andere Fehler in meinem Code geben und während ich mir nicht kenne, wenn sie darauf hingewiesen werden, ist der Schwerpunkt, den ich jetzt habe, diesen Pfadnamenfehler zu beheben.

    EDIT: Fast ein Monat jetzt und ich habe noch keine Lösung für das Problem gefunden. Jede Hilfe wäre toll, aber an diesem Punkt werde ich wahrscheinlich mein Projekt verlassen müssen.

  • Streaming große Datei von Heroku scheitert nach 30 Sekunden Timeout
  • Python-Teilprozeß nimmt keine korrekten Argumente an
  • Begrenzung von Schwimmern auf zwei Dezimalstellen
  • Gibt es einen aktuellen schnellen YAML-Parser mit Pythonbindungen?
  • Wie man eine Bokeh App mit verschiedenen Daten auf einem eingebetteten Bokeh Server wiederverwendet
  • Plotten von Zeitreihen mit Seaborn FacetGrid
  • 2 Solutions collect form web for “Python: Bad Window Pfad Name bei Verwendung von deiconify”

    Also, nach einer Pause ging ich zurück, um dieses Problem wieder zu sehen.

    Stellt sich heraus, dass das Problem self.protocol ('WM_DELETE_WINDOW', self.quit ()) war eigentlich nicht aufrufen self.quit () und zerstörte das Fenster komplett.

    Eine schnelle Änderung an self.protocol ('WM_DELETE_WINDOW', self.quit) scheint es behoben zu haben.

    Ich denke vielleicht das Komma verursacht das Problem. Versuchen Sie es so zu schreiben:

     #!/usr/bin/env python # -*- coding:utf-8 -*- try: from Tkinter import * except ImportError: from tkinter import * class HelpMenu(Toplevel): def __init__(self, parent, observer): Toplevel.__init__(self) self.observer = observer # Observer is the GUI, this is here just so I can update the GUI when I withdraw this window self.setup() self.withdraw() self.protocol('WM_DELETE_WINDOW', self.quit()) # Changes the close button to just hide the window def setup(self): self.columnconfigure(0, weight=1) w = 400 # Sets up the window position on the screen h = 150 sw = self.winfo_screenwidth() sh = self.winfo_screenheight() x = (sw - w) / 2 y = (sh - h) / 2 self.update() self.geometry('%dx%d+%d+%d' % (w, h, x, y)) self.resizable(width=0, height=0) self.grid() self.title("Help Menu") def quit(self): # Hides the window self.withdraw() self.observer.updateHelp(self) def display(self): # Re-displays the window self.deiconify() class UI(Tk): def initialize(self): # Handles setting up most of the GUI w = 500 # Window width h = 500 # Window height sw = self.winfo_screenwidth() # Gets screen width sh = self.winfo_screenheight() # Gets screen height x = (sw - w) / 2 # Calculates the x position for the left side of the window that allows it to be placed in the center of the screen y = (sh - h) / 2 # Calculates the y position for the top of the window that allows it to be placed in the center of the screen self.update() # Forces and update on the window self.geometry('%dx%d+%d+%d' % (w, h, x, y)) # Sets the windows width, height and position self.minsize(int(w), int(h / 2)) # Sets the minimum size of the window self.configureMenu() def updateHelp(self, helpMenu): self.helpMenu = helpMenu def displayHelp(self): self.helpMenu.display() def configureMenu(self): # Handles configuring and setting up the menus menu = Menu(self) # Setup the menu bar menu.add_command(label="Help", command=self.displayHelp) self.config(menu=menu) def __init__(self, parent): # Handles the initial call to create a GUI Tk.__init__(self, parent) # Parent constructor self.parent = parent # Store the parent self.initialize() # Initilize the GUI self.helpMenu = HelpMenu(self, self) self.mainloop() # Start the main loop if __name__ == "__main__": main = UI(None) 

    Es funktioniert perfekt von myside.

    Python ist die beste Programmiersprache der Welt.