2016-03-26 6 views
1

Ich habe ein sehr seltsames Problem mit Tkinter Eintritt Widgets gerannt. Wenn ich versuche, etwas in sie einzugeben, akzeptieren sie meine Eingabe nicht.Python Tkinter Eintrag Widget wird keine Eingabe akzeptieren

Nach einigen PC-Neustart und Python-Neuinstallation habe ich herausgefunden, warum das passiert: Ich hatte eine Nachricht kurz vor der root.mainloop() im Code. Der Code sieht etwa so aus:

def xyz(): 
    if not messagebox.askyesno("Title","Some text"): 
     exit() 
xyz() 
root.mainloop() 

fand ich, das Problem zu lösen, die Sie auf einem anderen Fenster nur manuell fokussieren und dann wieder zurück. Ich würde gerne wissen, ob es einen besseren Weg gibt, dies zu tun? Ich möchte meine Nachrichtenbox behalten, und nicht die unelegante Lösung des manuellen Änderns des Fensterfokus.

+0

Python keine Magie tun, weiß also nicht, welche Fenster Sie geschaltet werden sollen, so dass man die Dinge selbst zu codieren haben (ob es unelegant oder nicht) , dh focus_set() was auch immer du willst fokussiert. –

+0

Ich denke, das ist ein bekannter Fehler. Ich schätze, Sie sind auf Windows, weil ich denke, das ist die einzige Plattform, die diesen Fehler hat. Was passiert, wenn Sie 'root.after_idle (xyz)' anstatt 'xyz()' direkt aufrufen? Das gibt 'Hauptschleife' eine Chance zu starten, aber zeigt immer noch die Message-Box, sobald die GUI gestartet wird. –

+0

@BryanOakley Danke, Ihre Lösung hat perfekt funktioniert! Ich wusste vorher nichts von 'after_idle()'. –

Antwort

1

Sie können den Code wie dieses Problem zu beheben:

def xyz(): 
    if not messagebox.askyesno("Title","Some text"): 
     exit() 
root.after(10,xyz) #show the messagebox after root.mainloop() 
root.mainloop() 
Verwandte Themen