Problem mit Klassen bzw. Instanzierung
Verfasst: Montag 21. Januar 2008, 23:07
Ich habe folgendes Problem
Ich weiss nicht ob das überhaupt geht, aber es dürfte doch möglich sein eine Klasse in einer Funktion einer anderen Klasse zu instanzieren.
Bekomme da leider immer die Fehlermeldung:
NameError: global name 'question' is not defined
Hier mal der komplette Code.
Die Datei q.py
[/code]
Und die Datei, die darauf zugreift:
Es geht um den Aufruf von question.question in der Klasse BaseAskQDia
Das ganze wird ein Ratespiel mit shelve und wxpython.
Komme leider an diesem Punkt nicht weiter.
Bin für jeden Ansatz dankbar...
Danke im vorraus
Silentpolygon
Ich weiss nicht ob das überhaupt geht, aber es dürfte doch möglich sein eine Klasse in einer Funktion einer anderen Klasse zu instanzieren.
Bekomme da leider immer die Fehlermeldung:
NameError: global name 'question' is not defined
Hier mal der komplette Code.
Die Datei q.py
Code: Alles auswählen
class q():
def __init__(self, question, c1, c2, c3, c4, correct):
self.question = question
self.c1 = c1
self.c2 = c2
self.c3 = c3
self.c4 = c4
self.correct = correct
Und die Datei, die darauf zugreift:
Code: Alles auswählen
#!/usr/bin/env python
""" Testprogramm SilentQuiz - mit wxwidgets """
import wx, shelve, random
from q import q
class BaseAskQDia(wx.Dialog):
def __init__(self):
wx.Dialog.__init__(self, None, -1, 'Ask Question', size=(300, 200))
TestText = wx.StaticText(self, -1, question.question, (20, 20))
okButton = wx.Button(self, wx.ID_OK, "OK", pos=(20, 160))
okButton.SetDefault()
cancelButton = wx.Button(self, wx.ID_CANCEL, "Cancel", pos=(130, 160))
class MyFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "SilentQuiz", size=(260, 115))
p = wx.Panel(self)
self.button1 = wx.Button(p, -1, "Ask Question", pos=(20, 20))
self.Bind(wx.EVT_BUTTON, self.AskQDia, self.button1)
self.button1.SetDefault()
self.button2 = wx.Button(p, -1, "New Question", pos=(130, 20))
self.Bind(wx.EVT_BUTTON, self.NewQDia, self.button2)
self.button2.SetDefault()
self.button3 = wx.Button(p, -1, "Edit Question", pos=(20, 60))
self.Bind(wx.EVT_BUTTON, self.EditQDia, self.button3)
self.button3.SetDefault()
self.button4 = wx.Button(p, -1, "Show Question", pos=(130, 60))
self.Bind(wx.EVT_BUTTON, self.ShowQDia, self.button4)
self.button4.SetDefault()
def AskQDia(self, event):
qbase = shelve.open('Fragen.qz')
k = '1'
while qbase.has_key(k):
ck = int(k)
ck = ck + 1
k = str(ck)
else:
ck = int(k)
lk = ck - 1
quekey = random.randint(1, lk)
quekey = str(quekey)
question = qbase[quekey]
AskQuestion = BaseAskQDia()
result = AskQuestion.ShowModal()
def NewQDia(self, event):
print "Not implemented yet"
def EditQDia(self, event):
print "Not implemented yet"
def ShowQDia(self, event):
print "Not implemented yet"
if __name__ == "__main__":
app = wx.PySimpleApp()
frame = MyFrame()
frame.Show()
app.MainLoop()
Das ganze wird ein Ratespiel mit shelve und wxpython.
Komme leider an diesem Punkt nicht weiter.
Bin für jeden Ansatz dankbar...
Danke im vorraus
Silentpolygon