Windows-Taste abfragen

Fragen zu Tkinter.
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Hallo!

ich möchte gerne wissen ob es mit der .bind()-Methode möglich ist die Windows taste abzufragen.

Danke im voraus,
Der_Scripter
Python ist Cool!
Benutzeravatar
__blackjack__
User
Beiträge: 13075
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ja, ist es. 😎
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit diesem Snippet

Code: Alles auswählen

import tkinter as tk

def test(event):
    print('keysym:', event.keysym, event.state)

root = tk.Tk()

root.bind('<Key>', test)

root.mainloop()
kannst du rausfinden, woran du binden musst. Wenn das (wie bei meinem Mac) keine symbolischen Namen ausspuckt fuer Modifier, dann kannst du die gleiche Methodik benutzen & einfach filtern nach event.state - das sind Nummern bei mir, fuer die verschiedenen Modfier-Tasten.
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Danke!

Der keysym lautet "Win_L".
Wie kann man machen, dass das Windows-Menü sich aber nicht öffnet?
Python ist Cool!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich denke nicht, dass du das kannst. Das faengt das System parallel dazu ab.
Benutzeravatar
__blackjack__
User
Beiträge: 13075
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Unter Linux hat man das Problem das einige Anwender sich die Compose-Taste auf eine Windows-Taste legen (bei mir ist das eine Tux-Taste :-)) und damit die Anwendung die auch nicht mehr zu sehen bekommt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Schade...

Ich hab ein Entry in dem ein Text stehen soll. Sobald ich aber etwas anderes reinschreibe soll dieser text verschwinden.
Hab es schon mit insert() und dann .config() probiert klappt aber leider nicht :(
Python ist Cool!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Verstehe ich nicht. Was hat das mit der Windows-Taste zu tun? Und was willst du erreichen - sowas wie man auf Webseiten sieht, die in Eingabefeldern einen Hilfstext zeigen?
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Genau sowas...
Sry das ich im Falschen Thread bin, aber dachte das könnte man noch schnell beantworten.
Python ist Cool!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dafuer gibt es das FocusIn-Event, und darin musst du dann den Entry-Text halt loeschen. Wenn das nicht reicht, dann bitte ein minimales & funktionales Beispiel bauen, welches das Problem illustriert.
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Wenn ich mich irgendwo anmelde, dann steht da z.B. Email-Adresse (in grau) aber sobald ich ein Buchstabe eintippe, steht es nicht mehr im Entryfeld.
Python ist Cool!
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Was ist denn "Irgendwo"?
Reden wir von einer herkömmliche GUI? Reden wir von einer Webseite?
Von einer herkömmlichen GUI erwarte ich, dass der Inhalt makiert wird, wenn ich mit TAB hinein springe und sonst nicht.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

@Der_Scripter: ich habe dich schon verstanden. Meine Antwort bleibt gleich: du musst den Text loeschen, sobald das Widget den Focus *das erste mal* bekommen hat. Danach natuerlich nicht mehr.
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Habe noch nie mit Focus gearbeitet...
Wie bekomme ich das denn heraus ob das "Entryfeld" markiert ist?
Python ist Cool!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe dir das doch geschrieben. Es gibt ein FocusIn-Event. Genauso wie auch jedes andere Event, fuer das du dich mit bind registrieren kannst. Wenn du schon weisst, wie man ein key-Event registriert, dann ist das doch kein Unterschied?!
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Das hier klappt nicht:

Code: Alles auswählen

           
            test.bind("<FocusIn>", self.update)
            window.mainloop()

    def update(self):
        test.insert(END, "")
Ich finde den Fehler nicht!!
Python ist Cool!
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Hab die klammern vergessen :( :( :(
Python ist Cool!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Was heisst das jetzt? Jetzt geht es? Der Code oben geht bei mir auch nicht - siehe "ein minimales funktionsfaehiges Beispiel", was ich ja auch schon erwaehnt habe.
Der_Scripter
User
Beiträge: 26
Registriert: Sonntag 1. September 2019, 15:32

Code: Alles auswählen

test.bind("<FocusIn>", self.update)
wird zu

Code: Alles auswählen

test.bind("<FocusIn>", self.update())
Python ist Cool!
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist bestimmt nicht richtig. Das Argument darf nicht aufgerufen werden, sondern muss ein callable sein.
Antworten