PythonCard [close]

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Hallo Python Communnity,
ich habe einen kleinen Verbentrainer für Französisch geschrieben. Leider gibt es Probleme mit é, è, ê, und dem c mit dem Häkchen (nicht auf der Tastatur). Beim Vergleich von Verbformen mit der Lösung (aus CSV-Datei), welche die oben genannten Buchstaben enthalten, wird immer falsch angezeigt. Bei der Benutzung der Shell (ohne PythonCard) werden die Verben richtig verglichen. Was muss ich ändern, dass auch die Französischen Sonderzeichen funktionieren?

PS: Ich habe vor von V2.5 auf 3.x zu wechseln, im Forum habe ich gelesen, dass es PythonCard für 3.x nicht gibt. Tut sich da etwas? Oder sollte ich lieber auf ein anderes Toolkit umsteigen, wenn ja welches?
Zuletzt geändert von Lasse am Mittwoch 23. März 2011, 21:05, insgesamt 1-mal geändert.
BlackJack

@Lasse: Du wirst Dich wohl mit Unicode befassen müssen.

Ich hätte PythonCard jetzt auch für Python 2.x mittlerweile für tot gehalten. Ich persönlich schreibe ja wxPython-GUIs lieber per Hand. Alternativ könnte man `wxGlade` oder `XRCed` verwenden.

Gibt es wxPython überhaupt schon für Python 3.x?
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Gibt es wxPython überhaupt schon für Python 3.x?
AFAIK nicht.
Ich habe zwar auf der Mailingliste mal gelesen, dass jemand versucht hat, für sich selber einen Port zu machen, der auch teilweise funktioniert (also eher ein proof of concept), aber "so richtige" Bemühungen gibt es anscheinend nicht.
Also bleibt es dabei: bei Python 3.x immernoch Qt oder Tk.
Gruß!
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Hallo,

ich habe mal versucht mich über Unicode schlauzumachen und verschiedene Encodings verwendet (# -*- coding iso-8859-1 -*- oder mit 15, 16 als letzte Ziffern), das Problem beim Vergleich von Eingabe aus PythonCard und CSV-Datei blieb.

Meldung:
Warning (from warnings module):
File "C:\Documents and Settings\Michael\My Documents\Python\PythonCard\Verbengui.py", line 76
if self.components.TxVousForm.text == vokabelliste[6]:
UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
Was verwendet denn PythonCard intern für ein Encoding, welches ich in mein Programm übernehmen kann?
BlackJack

@Lasse: Der Kodierungskommentar sagt in welcher Kodierung die Quelltextdatei ist in der er steht. Das wirkt sich nur auf Unicode-Literale im Quelltext aus.

Du musst alle Texte in Unicode umwandeln.
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Hallo BlackJack,
deine Antwort mag zwar für einen Insider hilfreich sein aber ich frage mich, wie ich Dateien in Unicode speichere.

Gruß
Lasse
BlackJack

@Lasse: Daten kannst Du nicht in Unicode speichern. Darum muss man ja immer umwandeln wenn man mit Unicode arbeiten will. Du bekommst von der GUI die Eingabe als Unicode und aus der CSV-Datei bekommst Du Bytewerte. Die musst Du in Zeichen umwandeln -- also in Unicode. Und dazu musst Du die Kodierung benutzen, in der die Daten vorliegen.
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Das mit den Vokabeln funktioniert inzwischen, aber ich habe ein anderes Problem mit PythonCard.

Ich möchte, dass der Benutzer eine Eingabe in der GUI macht, die Daten geprüft werden und dann, wenn gültig, das Fenster geschlossen wird und das Programm im Textfeld weiterläuft.

Meine Frage:
Wie schließe ich ein PythonCard Fenster durch eine bestimmte Aktion im Fenster ohne, dass das Programm abbricht?
BlackJack

@Lasse: Was ist denn das für ein Fenster? Wenn es ein Dialog ist, der mit `ShowModal()` angezeigt wird, dann ruft man in der Regel `EndModal()` mit dem Rückgabecode (ein `int`) auf.
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Nein es ist ein Fenster wie für eine Anwendung mit Menü, Texten und mehreren Eingabefeldern, außerdem zwei Buttons. Wenn auf den Button weiter geklickt wird und die Eingaben zulässig sind soll das Fenster geschlossen werden, aber das Programm soll weiter laufen.

Code: Alles auswählen

{'application':{'type':'Application',
          'name':'Template',
    'backgrounds': [
    {'type':'Background',
          'name':'bgTemplate',
          'title':'Schiffe Versenken',
          'size':(290, 335),
          'style':['resizeable'],

        'menubar': {'type':'MenuBar',
         'menus': [
             {'type':'Menu',
             'name':'menuFile',
             'label':'&File',
             'items': [
                  {'type':'MenuItem',
                   'name':'menuFileExit',
                   'label':'E&xit',
                   'command':'exit',
                  },
              ]
             },
         ]
     },
         'components': [

{'type':'StaticText', 
    'name':'FeldgrA', 
    'position':(10, 190), 
    'font':{'faceName': u'MS Shell Dlg 2', 'family': 'sansSerif', 'size': 12}, 
    'foregroundColor':(255, 0, 0, 255), 
    'text':u'Das Feld ist ungültig!', 
    'visible':False, 
    },

{'type':'StaticText', 
    'name':'AnzahlA', 
    'position':(10, 170), 
    'font':{'faceName': u'MS Shell Dlg 2', 'family': 'sansSerif', 'size': 12}, 
    'foregroundColor':(255, 0, 0, 255), 
    'text':u'Du willst zu viele Schiffe bauen!', 
    'visible':False, 
    },

{'type':'Button', 
    'name':'ButNext', 
    'position':(14, 237), 
    'label':u'Weiter', 
    },

{'type':'Button', 
    'name':'ButDefault', 
    'position':(15, 210), 
    'label':u'Standard', 
    },

{'type':'TextField', 
    'name':'TxFeldgr', 
    'position':(70, 10), 
    'text':u'10', 
    },

{'type':'TextField', 
    'name':'TxGr5', 
    'position':(70, 50), 
    'text':u'1', 
    },

{'type':'TextField', 
    'name':'TxGr4', 
    'position':(70, 80), 
    'text':u'2', 
    },

{'type':'TextField', 
    'name':'TxGr3', 
    'position':(70, 110), 
    'text':u'3', 
    },

{'type':'TextField', 
    'name':'TxGr2', 
    'position':(70, 140), 
    'text':u'4', 
    },

{'type':'StaticText', 
    'name':'StaticText5', 
    'position':(10, 140), 
    'text':u'# #', 
    },

{'type':'StaticText', 
    'name':'StaticText4', 
    'position':(10, 110), 
    'text':u'# # #', 
    },

{'type':'StaticText', 
    'name':'StaticText3', 
    'position':(10, 80), 
    'text':u'# # # #', 
    },

{'type':'StaticText', 
    'name':'StaticText2', 
    'position':(9, 50), 
    'text':u'# # # # #', 
    },

{'type':'StaticText', 
    'name':'StaticText1', 
    'position':(10, 10), 
    'text':u'Feldgr\xf6\xdfe', 
    },

] # end components
} # end background
] # end backgrounds
} }
Antworten