2016-03-30 2 views
0

Ich bin neu bei Python. Ich erstelle gerade eine GUI mit 4 Optionen. Es bedeutet eine Frage und 4 Wahlmöglichkeiten. Benutzer wählen 1 Wahl und wenn auf OK klicken, wird es einen benutzerdefinierten Dialog zeigen und sagen Ihnen, ob Ihre Antwort richtig ist oder nichtWert der wx.Frame-Klasse an die wx.Dialog-Klasse in Python übergeben

import wx 

class MyFrame(wx.Frame): 

    def __init__(self): 
     wx.Frame.__init__(self, None, -1, "My Frame", size=(3000, 3000)) 
     panel = wx.Panel(self,-1) 
     #panel.Bind(wx.EVT_MOTION, self.OnMove) 
     wx.StaticText(panel, -1, "What are the values of X", pos=(10, 12)) 
     #self.posCtrl = wx.TextCtrl(panel, -1, "", pos=(100, 10)) 
     self.option1 = wx.CheckBox(panel, -1, "Apples", (20,100), (160,-1)) 
     wx.CheckBox(panel, -1, "Mango", (20,150), (160,-1)) 
     wx.CheckBox(panel, -1, "Banana", (20,200), (160,-1)) 
     wx.CheckBox(panel, -1, "Orange", (20,250), (160,-1)) 
     button=wx.Button(panel,label="OK",pos=(800, 400), size = (50,50)) 
     self.Bind(wx.EVT_BUTTON, self.newwindow, button) 


    # def OnMove(self, event): 
     # pos = event.GetPosition() 
     # self.posCtrl.SetValue("%s, %s" % (pos.x, pos.y)) 


    def newwindow(self, event): 
     dia = MyDialog(None, -1, 'buttons') 
     dia.ShowModal() 
     dia.Destroy() 



class MyDialog(wx.Dialog): 
    def __init__(self, parent, id, title): 
     wx.Dialog.__init__(self, parent, id, title, size=(350,300) 
     value = MyFrame.self.option1.GetValue() 
     print ("***** Value is" , value) 
app = wx.App(False) 
frame = MyFrame() 
frame.Show(True) 
app.MainLoop() 

Ich erhalte den Fehler. Wie den Wert von checkBox erhalten, die durch den Benutzer ausgewählt wird und den gleichen Rückgabewert zu Dialog Klasse

+0

Ein paar kurze Hinweise, um loszulegen: (1) Sie fehlen eine schließende Klammer in der Zeile, die mit 'wx.Dialog .__ init __...' in Ihrer 'MyDialog' Klasse beginnt; (2) 'Wert = MyFrame.self.option1.GetValue()' ist nicht gut. Sie möchten den Wert der instanziierten Klasse abrufen, die die globale Variable 'frame' ist. Probiere 'frame.option1.GetValue()' aus. – dpwilson

Antwort

0

Ersten tun richtige Kindererziehung für die wx.Dialog passieren:

def newwindow(self, event): 
    dia = MyDialog(self, -1, 'buttons') # refer to instance of MyFrame parent 

Sobald Sie das tun, Sie erhalten die Verweis auf den übergeordneten Frame im Dialog und es kann verwendet werden:

class MyDialog(wx.Dialog): 
    def __init__(self, parent, id, title): 
     # ... 
     value = parent.option1.GetValue() # parent is instance of MyFrame 
     print ("***** Value is" , value) 

Wie @dpwilson erwähnt, es ist nicht gut, zu versuchen, eine Klasse zuzugreifen (MyFrame) stattdessen die Instanz der Klasse (frame).

Ich denke, es ist besser Praxis ist explizit die MyFrame Instanz weitergeben („explicit ist besser als implizite“) an den wx.Dialog (z. B.. Von parent verwenden) anstatt zu versuchen, auf die globale Variable frame zu verlassen. frame ist nicht vorhanden, wenn Sie MyFrame/MyDialog von einem anderen Modul importieren.

Verwandte Themen