Ich versuche, eine Instanz einer Klasse zu löschen, wenn eine Bedingung erfüllt ist. Aber ich habe Probleme, weil es gelöscht wird, bevor es in die Bedingung eintritt. Ich weiß nicht, was los ist ... Der Code verwendet wxpython mit einigen Tasten zum Löschen von Elementen, so dass ich die Tasten korrekt init erstellen, aber wenn ich versuche, ein Element zu löschen, bevor es die erste Bedingung erreicht, es scheint durch die las bedingt gelöscht zu werden, das sollte vorher nie gemacht werden. So Ich weiß nicht, wo das Problem herkommt ... Der Fehler erhalte ich, wenn ich die Taste ‚DeleteItem‘ drücke zum ersten Mal ist:del Klasse mit wxpython innerhalb bedingte funktioniert unerwartet
‚lokal Variable‚T‘verwies vor der Zuweisung‘ (in 6. die Zeile: ... wenn T.items> 0 :)
Aber wenn ich die letzte Zeile del (T) lösche gibt es keinen Fehler.
geht hier den Grundcode:
class Test(object):
def __init__(self):
self.items=8
T=Test()
if button.GetName()=='deleteitem':
if T.items>0:
T.items-=1
if T.items<0:
del(T)
EDITED:
OK, wie das Beispiel ich zunächst geschrieben funktionieren kann, hier den Code geht, die Arbeit spielt keine:
import wx
class Test(object):
def __init__(self):
self.items=8
T=Test()
class MyFrame(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, -1, title,
pos=(150, 150), size=(350, 200))
self.btn = wx.Button(self, -1, "Press to delete Item, current Items: "+str(T.items))
self.Bind(wx.EVT_BUTTON, self.OnButton, self.btn)
def OnButton(self, evt):
print 'Current Items: '+str(T.items)
self.btn.SetLabel('Press to delete Item, current Items: '+str(T.items))
if T.items>0:
T.items-=1
if T.items==0:
del(T)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, "Simple wxPython App")
frame.Show(True)
return True
app = MyApp()
app.MainLoop()
ENDGÜLTIGER ARBEITSCODE:
import wx
class Test(object):
def __init__(self):
self.items=8
class MyFrame(wx.Frame):
def __init__(self, parent, title):
self.T=Test()
wx.Frame.__init__(self, parent, -1, title,
pos=(150, 150), size=(350, 200))
self.btn = wx.Button(self, -1, "Press to delete Item, current Items: "+str(self.T.items))
self.Bind(wx.EVT_BUTTON, self.OnButton, self.btn)
def OnButton(self, evt):
if self.T.items>0:
self.T.items-=1
if self.T.items==0:
del(self.T)
self.btn.SetLabel('Deleted instance T')
else:
self.btn.SetLabel('Press to delete Item, current Items: '+str(self.T.items))
print 'current Items: '+str(self.T.items)
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, "Simple wxPython App")
frame.Show(True)
return True
app = MyApp()
app.MainLoop()
Danke 7stud, Es scheint, dass der Fehler in dem Link, den Sie postet, verwandt ist ... Aber wie auch immer, ich habe den Code aktualisiert, so dass es jetzt nicht funktioniert. –
Vielen Dank 7stud! Es funktioniert perfekt! ... Ich bearbeitete und postete den neuen Arbeitscode, –
@RubenMedrano, In Ihrem Post las ich: * Aber wenn ich die letzte Zeile del (T) lösche gibt es keinen Fehler. *, Der alles negiert Ich behauptete, dass es passierte. Wenn Sie schauen wollen, habe ich meine Erklärung geändert. – 7stud