我是python的新手。我目前正在创建一个有4个选项的GUI。这意味着一个问题和相应的4个选择。用户将选择1个选项,当单击确定时,它将显示自定义对话框并告诉您答案是否正确
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()
我收到错误。如何获取用户选择的checkBox的值,并将相同的返回值传递给Dialog类
答案 0 :(得分:0)
首先为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
。如果您从其他模块导入frame
/ MyFrame
,则MyDialog
将不会出现。