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