在python中将wx.Frame类的值传递给wx.Dialog类

在python中将wx.Frame类的值传递给wx.Dialog类,python,wxpython,Python,Wxpython,我是python新手。我目前正在创建一个GUI,它有4个选项。它意味着一个问题和四个选择。用户将选择1个选项,当单击OK时,它将显示一个自定义对话框,并告诉您答案是否正确 import wx class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, "My Frame", size=(3000, 3000)) panel = wx.Panel(self,

我是python新手。我目前正在创建一个GUI,它有4个选项。它意味着一个问题和四个选择。用户将选择1个选项,当单击OK时,它将显示一个自定义对话框,并告诉您答案是否正确

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()

我得到了错误。如何获取用户选择的复选框的值,并将相同的返回值传递给Dialog类

首先对
wx.Dialog
执行正确的父项设置:

def newwindow(self, event):
    dia = MyDialog(self, -1, 'buttons') # refer to instance of MyFrame parent
完成此操作后,即可在对话框中获得对父帧的引用,并且可以使用该引用:

class MyDialog(wx.Dialog):
    def __init__(self, parent, id, title):
        # ...
        value = parent.option1.GetValue() # parent is instance of MyFrame
        print ("***** Value is" , value)
正如@dpwilson所提到的,尝试访问类(
MyFrame
)而不是类的实例(
frame
)是没有好处的


我认为最好的做法是显式地将
MyFrame
实例(“显式优于隐式”)传递到
wx.Dialog
(例如,通过使用
parent
)而不是试图依赖全局变量
frame
<如果您从另一个模块导入
MyFrame
/
MyDialog
,则code>frame将不存在。

开始的几点提示:(1)在
MyDialog
类中,以
wx.Dialog开头的行中缺少一个右括号。
;(2)
value=MyFrame.self.option1.GetValue()
不好。您需要获取实例化类的值,它是全局变量
frame
。尝试
frame.option1.GetValue()