wxpython-从另一帧返回输入变量

wxpython-从另一帧返回输入变量,wxpython,Wxpython,在一个帧中的一个面板中,如何引用另一帧中另一个面板中的输入变量 我基本上想在我的wxpython gui的菜单栏中创建一个“选项”选项卡,当单击该选项卡时,会打开一个新的框架,允许用户更改一些变量。然而,当我稍后尝试引用这些变量时,我得到 AttributeError:类型对象“Options Panel”没有属性“Input1” 我将两个面板和两个框架都定义为类。 这是我的完整代码: 导入wx 类大型机(wx.Frame): 定义初始(自我,标题): wx.Frame.\uuuuu init\

在一个帧中的一个面板中,如何引用另一帧中另一个面板中的输入变量

我基本上想在我的wxpython gui的菜单栏中创建一个“选项”选项卡,当单击该选项卡时,会打开一个新的框架,允许用户更改一些变量。然而,当我稍后尝试引用这些变量时,我得到 AttributeError:类型对象“Options Panel”没有属性“Input1”

我将两个面板和两个框架都定义为类。 这是我的完整代码:

导入wx
类大型机(wx.Frame):
定义初始(自我,标题):
wx.Frame.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
menuBar=wx.menuBar()
menu=wx.menu()
m_options=menu.Append(wx.ID_EDIT,“&options”,“options”)
self.Bind(wx.EVT_菜单、self.OnOptions、m_选项)
menuBar.Append(菜单“&选项”)
self.SetMenuBar(menuBar)
面板=主面板(自身)
定义选项(自身、事件):
框架=选项框架(“选项框架”)
frame.Show()
类选项框架(wx.Frame):
定义初始(自我,标题):
wx.Frame.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuux(self,None,title=title,pos=
面板=选项面板(自身)
类别选项面板(wx.Panel):
定义初始化(自身,父级):
wx.Panel.\uuuuu init\uuuuuuuuuuuux(自,父)
self.label=wx.StaticText(self,label=“输入值”,pos=(40,60))
self.Input1=wx.TextCtrl(self,value=“1.0”,pos=(80,80),size=(60,-1))
类主面板(wx.Panel):
定义初始化(自身,父级):
wx.Panel.\uuuuu init\uuuuuuuuuuuux(自,父)
self.button=wx.button(self,label=“GO”,pos=(60100))
self.Bind(wx.EVT_按钮、self.OnClick、self.BUTTON)
def OnClick(自我,事件):
MyVariable=OptionsPanel.Input1.GetValue()#这不起作用!
打印dt0
如果名称=“\uuuuu main\uuuuuuuu”:
app=wx.app(重定向=False)
帧=大型机(“多帧尝试”)
frame.Show()
app.MainLoop()

提前谢谢

一个问题是类MainPanel中的OnClick方法引用的是类OptionsPanel,而不是类OptionsFrame中类OptionsPanel(“panel”)的实例化

import wx
class MainFrame(wx.Frame):
    def __init__(self,title):
        wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(200,300))
        menuBar = wx.MenuBar()
        menu = wx.Menu()
        m_options = menu.Append(wx.ID_EDIT, "&Options", "Options")
        self.Bind(wx.EVT_MENU, self.OnOptions, m_options)
        menuBar.Append(menu, "&Options")
        self.SetMenuBar(menuBar)
        panel=MainPanel(self)
        self.options_frame = None
    def OnOptions(self, event):
        self.options_frame = OptionsFrame("Options Frame")
        self.options_frame.Show()
    def GetInput1Value(self):
        if self.options_frame is not None:
            return(self.options_frame.options_panel.Input1.GetValue())
        else:
            return('None')
class OptionsFrame(wx.Frame):
    def __init__(self,title):
        wx.Frame.__init__(self, None, title=title, pos=(150,150), size=(200,200))    
        self.options_panel=OptionsPanel(self)
class OptionsPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.label = wx.StaticText(self, label="Input Value", pos=(40,60))
        self.Input1 = wx.TextCtrl(self, value="1.0", pos=(80,80), size=(60,-1))
class MainPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.parent_frame = parent
        self.button =wx.Button(self, label="GO", pos=(60,100))
        self.Bind(wx.EVT_BUTTON, self.OnClick,self.button)
    def OnClick(self,event):
        MyVariable= self.parent_frame.GetInput1Value()
        print MyVariable
if __name__=="__main__":
    app = wx.App(redirect=False)
    frame = MainFrame("Multiple Frames Attempt")
    frame.Show()
    app.MainLoop()

谢谢David,你对我需要在代码中进行哪些更改来解决这个问题有什么建议吗?我承认这不是很符合Python的,但请看我编辑过的答案。这些更改对你的代码有意义吗?你看到OnClick在类主面板中现在可以访问Input1 TextCtrl?很好!它起作用了!对不起,我有个假期。。。好吧,我希望能够在选项框中输入数字,有一个OK按钮关闭选项框,并且以后仍然能够在选项框未打开的情况下引用该值…@Moj好极了!很高兴我能帮忙。