Hallo Forum!
Ich habe es tatsächlich endlich geschafft, eine GUI-Anwendung auf die Beine zu stellen. Das Projekt hört auf den Namen "LuckyWords", ist eine Mischung aus "Hangman" und "Glücksrad" und kann auf GitHub heruntergeladen werden (https://github.com/casualcoding/luckywords). Wenn gewünscht, stelle ich den Quelltext aber auch in Code-Tags hier ein.
Benötigt werden Python 3 und PyQt4.
Getestet habe ich nur unter Linux und Windows XP. Außerdem sind noch nicht alle geplanten Features drin und es hat nur das 'File'-Menü eine Funktion, aber es ist spielbar. Kommentare, Hinweise, Anregungen werden gern genommen, auch Tester unter anderen Plattformen sind willkommen.
Liebe Grüße,
Dennis
LuckyWords - erste Alpha (0.3.0)
Das Verbinden der Buchstaben-Buttons in der ``luckywords.py`` liesse sich auch so schreiben:
Und in ``keyPressEvent`` bietet sich ein Vorgehen in dieser Art ebenfalls an.
Code: Alles auswählen
import string
# ...
def createConnects(self):
for character in string.ascii_lowercase:
button = getattr(self.ui, 'button_' + character.upper())
button.clicked.connect(lambda: self.check(character))
@snafu: Da bist Du in eine Falle getappt: Die ``lambda``-Funktion wird so nicht funktionieren weil `character` erst beim Ausführen der Funktion aufgelöst wird und zu dem Zeitpunkt ist das dann für alle Buttons das 'z'.
Das ist echt fies. Dann halt so:
Code: Alles auswählen
import functools
import string
# ...
def createConnects(self):
for character in string.ascii_lowercase:
button = getattr(self.ui, 'button_' + character.upper())
button.clicked.connect(functools.partial(self.check, character))
Was auch funktioniert hätte: Man kann bei lambda auch die Parameter angeben, die zum Zeitpunkt beim Setzen der Funktion gilt.
Statt in Zeile 9 das zu schreiben:kann man stattdessen schreiben:
Statt in Zeile 9 das zu schreiben:
Code: Alles auswählen
button.clicked.connect(lambda: self.check(character))
Code: Alles auswählen
button.clicked.connect(lambda character=character: self.check(character))
Wow, super, danke für die Tipps! Genau dieser Teil mit den 26 Connects hat mich nämlich auch gestört, nur hatte ich keine Idee, wie ich das ändern kann (zumal ich die GUI mit dem Designer aufsetze und nicht manuell).
Das gehe ich gleich mal an!
Das gehe ich gleich mal an!
Stimmt. Oder wenn die Zeile halt nicht so lang werden soll:Astorek hat geschrieben:Code: Alles auswählen
button.clicked.connect(lambda character=character: self.check(character))
Code: Alles auswählen
button.clicked.connect(lambda c=character: self.check(c))
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@CasualCoding.org: Wie wäre es mal mit einem netten Screenshot auf Github? Finde ich bei Programmen immer animierend
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert