在python中将wx.Frame类的值传递给wx.Dialog类
我是python新手。我目前正在创建一个GUI,它有4个选项。它意味着一个问题和四个选择。用户将选择1个选项,当单击OK时,它将显示一个自定义对话框,并告诉您答案是否正确在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,
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()
。