Ich schreibe ein Tkinter-Programm, wo ich ein Optionsmenü mit anderen UI-Elementen habe. Ich habe eine Anforderung, dass, wenn Optionsmenü-Dropdown für eine bestimmte Zeit (etwa 1 Minute) aktiv bleibt, ich das Dropdown-Menü schließen und die Auswahl abbrechen muss. Ich habe mich gefragt, ob es einen Weg gibt zu wissen, ob ein Dropdown-Menü für Optionsmenüs aktiv ist. Ich habe this besonderen Link angeschaut, konnte aber keine spezifische Methode für das finden, was ich brauche.Gibt es eine Möglichkeit zu wissen, ob das Dropdown-Menü Tkinter optionsmenu aktiv ist?
Antwort
Nachverfolgen, ob das Menü geschlossen oder offen ist, ist einfach mit einem Befehl und klicken Sie auf Bindung. Der schwierige Teil zwingt das Menü zum Schließen. Entweder ein physischer Mausklick auf das Widget oder Drücken von Escape wird dies tun. Ereignisse zu generieren reicht jedoch nicht. Die folgenden #commented_out-Bits sind fehlgeschlagene Experimente.
import tkinter as tk
root = tk.Tk()
n = 2
after_id = None
menu_open = False
omvar = tk.StringVar(root)
def timeout():
print('timeout called')
omvar.set('')
#root.event_generate('<Key-Escape>', keysym='Escape', keycode=9)
#om.destroy()
#root.event_generate('<FocusIn>')
#root.focus_get()
#root.event_generate('<Button-1>', x=10, y=20)
root.update()
def open(event):
print('open called')
global after_id, menu_open
after_id = root.after(n*1000, timeout)
menu_open = True
def close(val):
print('closed by', val)
global after_id, menu_open
root.after_cancel(after_id)
after_id = None
menu_open = False
om = tk.OptionMenu(root, omvar, 'a', 'b', 'c', command=close)
om.bind('<Button-1>', open)
om.pack()
root.mainloop()
Ein MenuButton + Menü würde fast gleich aussehen und könnte einfacher sein. Würdest du das berücksichtigen?
zunächst eine Variable definieren, (zum Beispiel: DDO = 0) Dann einen Klick auf Ihrer Dropdownlist auslösen, wenn sie angeklickt, Makel DDO = 1 (wenn DDO == 1 dann DDO = 0) und wenn DDO == 1 ein Timer beginnt für 1 Sekunde zu zählen, danach 1 Sekunde, wenn ddo == 1, dann schließen Sie die Auswahlbox (zum Beispiel durch Fokussieren auf ein anderes Element) und tun Sie, was immer Sie wollen. Ein Beispiel Pseudo-Code ist hier:
- 1. Gibt es eine Möglichkeit zu wissen, ob Windows 7 Touch auf dem Gerät aktiv ist?
- 2. Gibt es eine Möglichkeit zu wissen, ob ein Status aktiv ist, ohne dass ContextNotActiveException abgefangen wird?
- 3. Gibt es eine Möglichkeit zu wissen, ob Benutzer Mail öffnen?
- 4. Java: Gibt es eine Möglichkeit zu wissen, ob ein InputStream eine Readonly-Datei ist
- 5. Gibt es eine Möglichkeit zu überprüfen, ob ein Host aktiv ist?
- 6. Gibt es eine Möglichkeit zu überprüfen, ob der Benutzer momentan nicht aktiv ist?
- 7. Gibt es eine Möglichkeit zu wissen, ob das Projekt in Eclipse oder Android Studio erstellt wurde?
- 8. Gibt es eine effiziente Möglichkeit zu sagen, ob Text in einem Tkinter Text Widget ausgewählt ist?
- 9. Gibt es eine Möglichkeit, Ribbon-Symbolleisten in Tkinter zu verwenden?
- 10. Gibt es eine Möglichkeit, transparente Fenster mit Tkinter zu erstellen?
- 11. Gibt es eine Möglichkeit zu wissen, ob eine Aktivität mit Espresso gestartet wurde?
- 12. Möglichkeit zu überprüfen, ob TinyMCE in WordPress aktiv ist
- 13. Gibt es eine Möglichkeit zu wissen, ob ein Formular minimiert wurde?
- 14. Ist es möglich herauszufinden, ob eine VNC-Verbindung aktiv ist?
- 15. Gibt es eine Möglichkeit zu wissen, ob Deflate (oder Ihr Z_STREAM) Daten gepuffert hat? zlib C++
- 16. Gibt es eine Möglichkeit zu wissen, ob ein Feld java.awt.Component erweitert?
- 17. Gibt es eine Möglichkeit zu wissen, ob ein PHP-Skript im CLI-Modus läuft?
- 18. Gibt es eine einfache Möglichkeit zu wissen, ob ein modaler Dialog aktuell angezeigt wird?
- 19. Gibt es eine Möglichkeit zu wissen, ob ExecutorService erfolgreich beendet wurde?
- 20. Gibt es eine Möglichkeit ein iPhone zu wissen, welche Netzwerk (LTE vs GSM) verbunden ist
- 21. Gibt es eine Möglichkeit herauszufinden, ob ein Thread blockiert ist?
- 22. Gibt es eine Möglichkeit festzustellen, ob Java System.in "interaktiv" ist?
- 23. Gibt es eine Möglichkeit zu sagen, ob ReactElement "null" darstellt?
- 24. Gibt es eine Möglichkeit zu überprüfen, ob das aktuelle Fenster eines anderen Programms vollständig sichtbar ist?
- 25. Gibt es eine Möglichkeit zu bestimmen, ob Browser Telefonverbindungen
- 26. Gibt es eine Möglichkeit, ein IPhone zu "pingen", um zu sehen, ob es eingeschaltet ist?
- 27. Gibt es eine Möglichkeit zu sagen, ob eine OpenGL-Operation abgeschlossen ist?
- 28. Gibt es eine Möglichkeit für eine Java-Anwendung zu erkennen, ob der Bildschirm gesperrt ist?
- 29. Gibt es eine Möglichkeit zu überprüfen, ob eine native Javascript-Funktion ein Affe-Patch ist?
- 30. Gibt es eine Möglichkeit, das vorherige Element zu targetieren?
Ich verwendete schließlich Pymouse Bibliothek, um einen Knopfklick zu simulieren und jetzt funktioniert es perfekt zusammen mit Ihrer Lösung. – dhruvvyas90