Keylistener shift gedrück

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
malzbier
User
Beiträge: 13
Registriert: Mittwoch 25. November 2020, 09:42

Hallo zusammen,

ich habe eine allgemein Frage. Ich will einen flexliblen Keylistener bauen, wo der Benutzer selbst
auswählen kann, wie er die Tasten belegt.
Mein erster Gedanke war, die Tastenkürzel in einer Textdatei zu speichern und die hex werte zu nehmen.
Aber mal ne ganz dumme Frage:

Wie wandle ich den String:
0x41 in den Wert um, dass ich dann im Code vergleichen kann.
Ich habe es als Beispiel mit den Buchstaben a versucht:

def keyPressEvent(self, event):
tmp = "0x41"
tmp_int = int(tmp, 16)
value = hex(tmp_int)
print("The value " + value)
modifiers = QApplication.keyboardModifiers()
if event.key() == Qt.Key_R:
self.rotieren(self.pos1, self.pos2, self.pos3, self.pos4, self.pos5, self.pos6)
self.showCurrentLineup(self.currentLineUp)
elif (modifiers & Qt.ShiftModifier) and (event.key() == value):
print("shift a")
elif event.key() == value:
print('a')
else:
None

PS: Wenn es eine bessere Möglichkeit gibt als eine Textdatei um die Daten zu speichern bin ich natürlich offen.
Aber so Sachen wie eine Datenbank wäre dafür schon ein wenig op finde ich.
Benutzeravatar
__blackjack__
User
Beiträge: 13121
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich bin mir gerade nicht sicher was das mit `tmp` und `tmp_int` soll. Da hättest Du auch gleich einfach ``value = "0x41"`` schreiben können. Nur das es keinen Sinn macht eine Zeichenkette mit der Zahl zu vergleichen die `QKeyEvent.key()` als Rückgabewert hat, denn eine Zeichenkette ist *immer* ungleich einer Zahl.

Benutzerfreundlicher als irgendwelche Zahlen währen wohl die Zeichenketten die `QKeySequence` versteht.

Und wenn Textdatei mit strukturierten Daten, dann verwende etwas bekanntes, statt ein eigenes Format zu erfinden. JSON beispielsweise.

Anmerkungen zum Quelltextausschnitt: Die nummerierten `pos*`-Attribute sehen so aus als sollte das *ein* Wert sein, der die Daten zusammenfasst. Beispielsweise eine Liste.

Und sowohl in der Zeile, als auch in der nächsten, stellt sich die Frage warum die Daten übergeben werden, denn die sind ja als Attribute auf dem gleichen Objekt definiert. Insbesondere bei ``self.showCurrentLineup(self.currentLineUp)`` sieht das sehr redundant aus.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
malzbier
User
Beiträge: 13
Registriert: Mittwoch 25. November 2020, 09:42

Hi Black jack und vielen dank für die Antwort.
Ja das mit dem value am Anfang war so mein lertzter Versuch es alleine hinzukriegen :-/

Glaube JSON kommt der Sache ziemlich nahe, danke für den Tipp.

Im Prinzip will ich halt, dass der User in einem Formular selber bestimmen kann, welche Tasten er benutzt und diese will ich dann speichern.
Nehmen wir mal an der User wählt "h" für eine Aktion. Was meinst du wäre die beste Methode es in der JSON Datei zu speichern?
Gobt es eine Möglichkeit dann auch "H" bzw "shift + h" zu speichern?

Danke schon mal für die Antwort

PS Die PS sind übergebene Paramter einer Methode
showCurrentlineUp ist eine Methode und currentLineup auch halt übergebene Parameter
Benutzeravatar
__blackjack__
User
Beiträge: 13121
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@malzbier: Schau Dir doch mal `QKeySequence` an. Da steht doch in der Dokumentation wie die Zeichenketten aussehen müssen und wie man das mit Shift und den anderen Tasten macht.

Bezüglich des PS: Ich weiss das alles. Aber *warum* ist `self.currentLineup` ein Argument von `self.showCurrentlineUp()`? Zumindest den Namen nach macht das gar keinen Sinn. Und die nummerierten `pos*` sehen halt auch verdächtig falsch aus. Warum sind die nummeriert? Warum haben die keine anständigen Namen? Jedes einzelne, seiner Bedeutung nach benannt, und nicht das wie vielte Argument das ist. Und es stellt sich auch hier wieder, wenn auch nicht ganz so stark, die Frage warum Attribute des Objekte einer Methode des selben Objekts als Argument(e) übergeben werden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten