Ich kann in meinem Programm Folgendes tun, um einen einfachen Dateidialog zu öffnen und den ausgewählten Dateipfad zu drucken. Leider verschwindet es nicht sofort, wenn der Benutzer die Datei auswählt und bleibt länger als 5 Minuten in der Nähe. Wie mache ich das Fenster sofort verschwinden, sobald eine Auswahl getroffen wurde, bevor Sie mehr Python-Code ausführen? Nach dem Tkinter Code versuche ich ein paar Videos mit OpenCV zu importieren, was die Verlangsamung verursachen könnte. Mein OpenCV-Code wird korrekt ausgeführt, und ich glaube nicht, dass es ein Problem damit alleine gibt (d. H. Eine Interaktion verursacht den Fehler & vielleicht wird ein intensiver Prozess gestartet, bevor Tkinter seinen GUI-Dialog schließt).Was könnte dazu führen, dass ein geöffnetes Dateidialogfenster in Tkinter/Python wirklich langsam geschlossen wird, nachdem der Benutzer eine Datei ausgewählt hat?
import Tkinter as Tk
import cv2
from tkFileDialog import askopenfilename
root = Tk.Tk()
root.withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)
cap = cv2.VideoCapture('video.mp4') # this works just fine
Ich benutze Python 2.7 und Mac OS X 10.9, wenn das nützlich ist.
[BEARBEITEN: Dies scheint nicht ein Problem für alle zu sein, aber es ist für mich, also ändere ich die Frage, um auch das Problem zu debuggen. Ich möchte nicht, dass etwas ausgeführt wird, bis das Dialogfeld "Datei öffnen" von Tkinter fertig ist und in der GUI geschlossen wird. Es scheint, dass ein nachfolgender Schritt in meinem Programm (ein offener CV-Video-Import) irgendwie dazu führen könnte, dass Tkinter die Dinge verlangsamt, also möchte ich sicherstellen, dass es schließt, bevor irgendein neuer Prozess gestartet wird. Wieder schließt das Tkinter-Fenster nach 5 Minuten tatsächlich ...]
Der Dialog geht für mich weg. Wenn der Dialog erscheint, klicken Sie auf den "Öffnen" -Button? Wenn Sie auf "Öffnen" klicken oder auf eine Datei doppelklicken, sollte der Dialog verschwinden. –
Hmm - es geht nicht weg für mich. Irgendeine Idee, wie man debuggt? – user391339
Nach Ihrer Bearbeitung klingt es so, als würden Sie der Ereignisschleife keine Möglichkeit geben, alle Ereignisse zu verarbeiten. Was passiert, wenn Sie nach dem Abrufen des Dateinamens 'root.update()' aufrufen? –