Ich habe folgendes Problem mit EVT_TEXT bzw. GetString().
Ziel:
Ich möchte eine Eingabe in ein TextCtrl machen und mit den Werten dann weiterrechnen.
Ich habe das ganze schon auf Konsole fertig und es funktioniert.
Jetzt wollte ich das ganze mit wxPython umsetzen:
Code: Alles auswählen
# -*- coding: cp1252 -*-
import wx
class MyFrame(wx.Frame):
    def __init__(self, parent, id):
        # Layout
        wx.Frame.__init__(self, parent, id, 'Lösungsberechner',
                          size=(340, 300))
        panel = wx.Panel(self, -1)
        panel.SetBackgroundColour("White")
        static_verb = wx.StaticText(panel, wx.NewId(), "Verbindung", pos=(10, 50))
        static_verb.SetBackgroundColour("White")
        entry_verb = wx.TextCtrl(panel, wx.NewId(), "", size=(100, -1),
                                 pos=(80, 50))
        static_exs = wx.StaticText(panel, wx.NewId(), "Beispiel: Ba(OH)2", pos=(80, 80))
        static_exs.SetBackgroundColour("White")
        static_mol = wx.StaticText(panel, wx.NewId(), "Molarität", pos=(10, 100))
        entry_mol = wx.TextCtrl(panel, wx.NewId(), "", size=(100, -1),
                                 pos=(80, 100))
        
        static_molL = wx.StaticText(panel, wx.NewId(), "mol/L", pos=(190, 100))
        static_molL.SetBackgroundColour("White")
        static_vol = wx.StaticText(panel, wx.NewId(), "Volumen", pos=(10, 150))
        entry_vol = wx.TextCtrl(panel, wx.NewId(), "", size=(100, -1),
                                 pos=(80, 150))
        
        static_liter = wx.StaticText(panel, wx.NewId(), "L", pos=(190, 150))
        static_liter.SetBackgroundColour("White")
        ok_button = wx.Button(panel, -1, "Ok", pos=(80, 200))
        self.Bind(wx.EVT_TEXT, self.get_verb, entry_verb)
        self.Bind(wx.EVT_TEXT, self.get_mol, entry_mol)
        self.Bind(wx.EVT_TEXT, self.get_vol, entry_vol)
        self.Bind(wx.EVT_BUTTON, self.berechne, ok_button)
    def get_verb(self, event):
        # Chemische Verbindung
        verb = event.GetString()
        return verb
    def get_mol(self, event):
        # Molarität
        mol = event.GetString()
        return mol
    def get_vol(self, event):
        # Volumen
        volumen = event.GetString()
        return volumen
    def berechne(self, event):
        verbindung = get_verb(self, event)
        mola = get_mol(self,event)
        vol = get_vol(self, event)
        # Molare Masse Dictionary
        mm = {'BaSO4': ('Bariumsulfat', '233'), 'CaC2': ('Calciumcarbid', '64.1')}
        # Formel
        masse = float(mm[verbindung][1]) * float(vol) * float(mola)
        # Ausgabe
        static_ausg = wx.StaticText(panel, wx.NewId(), text=masse, pos=(200, 150))
  
if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = MyFrame(parent=None, id=-1)
    frame.Show()
    app.MainLoop()2) Wenn ich das Script oben laufen lasse, bekomme ich folgende Fehlermeldung (auf Konsole funktioniert's):
NameError: global name 'get_verb' is not defined
2) Wenn ich verb in get_verb() mit print ausgebe und in dem Dictionary raussuchen lasse, funktioniert das.
Ich bekomme aber solange eine KeyError Fehlermeldung, bis die Verbindung vollständig eingegebn wurde.
Wie kann ich nach dem kompletten String suchen und nicht jedesmal,
wenn ich einen Buchstaben eingebe? Ausserdem funktioniert die nur, wenn das Dict innerhalb der Funktion ist.
3) Kann ich im StaticText mein Ergebnis so ausgeben (text=masse)?
Liebe Grüsse
Stefanie

