Anfänger Problem mit EVT_TEXT bzw. GetString()
Verfasst: Montag 8. Oktober 2007, 07:42
Hallo!
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:
1) Wenn ich die Berechnung in def __init__ lege funktioniert alles.
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
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