LuckyWords - erste Alpha (0.3.0)

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
CasualCoding.org

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
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@CasualCoding.org: diese 26 kopierten Zeilen würde ich ja jeweils in einer Schleife abarbeiten und das ui-File direkt laden, anstatt es nach .py umzuwandeln.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das Verbinden der Buchstaben-Buttons in der ``luckywords.py`` liesse sich auch so schreiben:

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))
Und in ``keyPressEvent`` bietet sich ein Vorgehen in dieser Art ebenfalls an.
BlackJack

@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'.
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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))
Astorek
User
Beiträge: 72
Registriert: Samstag 24. Januar 2009, 15:06
Kontaktdaten:

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:

Code: Alles auswählen

button.clicked.connect(lambda: self.check(character))
kann man stattdessen schreiben:

Code: Alles auswählen

button.clicked.connect(lambda character=character: self.check(character))
CasualCoding.org

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!
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Astorek hat geschrieben:

Code: Alles auswählen

button.clicked.connect(lambda character=character: self.check(character))
Stimmt. Oder wenn die Zeile halt nicht so lang werden soll:

Code: Alles auswählen

button.clicked.connect(lambda c=character: self.check(c))
Benutzeravatar
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
Antworten