Как передать переменные в основной кадр? - PullRequest
2 голосов
/ 03 июля 2019

Я могу передать переменные из основного кадра во второй кадр, однако я не смог преуспеть, сделать это наоборот?

Ошибка:

Traceback (most recent call last):
  File "C:\Users\GCS-User\Desktop\with canvas\__or(class_variable).py", line 33, in OnButton2
    self.textCtrl1.SetValue(self.parent.z)
AttributeError: 'NoneType' object has no attribute 'z'

Код:

# -*- coding: utf-8 -*- 

import wx

class A (wx.Frame):
    def __init__(self, parent):
        self.parent = parent
        wx.Frame.__init__(self, parent)
        bSizer1 = wx.BoxSizer( wx.VERTICAL )
        self.startButton1 = wx.Button( self, wx.ID_ANY, u"Button1", wx.DefaultPosition, wx.DefaultSize, 0 )       
        bSizer1.Add( self.startButton1, 1, wx.ALL|wx.EXPAND, 5 )
        self.startButton2 = wx.Button( self, wx.ID_ANY, u"Button2", wx.DefaultPosition, wx.DefaultSize, 0 )       
        bSizer1.Add( self.startButton2, 1, wx.ALL|wx.EXPAND, 5 )

        self.textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer1.Add( self.textCtrl1, 1, wx.ALL|wx.EXPAND, 5 )

        self.SetSizer( bSizer1 )
        self.Layout()

        self.startButton1.Bind(wx.EVT_BUTTON, self.OnButton1)
        self.startButton2.Bind(wx.EVT_BUTTON, self.OnButton2)
        self.count = 0


    def OnButton1(self, event):
        self.x = 5 + self.count
        self.y = 7 + self.count
        B(self).Show()
        self.count += 1

    def OnButton2(self, event):
        self.textCtrl1.SetValue(self.parent.z)

class B(wx.Frame):
    def __init__(self, parent):
        self.parent = parent
        wx.Frame.__init__(self, parent)
        bSizer1 = wx.BoxSizer( wx.HORIZONTAL )

        self.startButton3 = wx.Button( self, wx.ID_ANY, u"Button3", wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer1.Add( self.startButton3, 1, wx.ALL|wx.EXPAND, 5 )

        self.textCtrl2 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
        bSizer1.Add( self.textCtrl2, 1, wx.ALL|wx.EXPAND, 5 )

        self.SetSizer( bSizer1 )
        self.Layout()

        self.startButton3.Bind(wx.EVT_BUTTON, self.OnButton3)

        self.z = self.parent.x + self.parent.y

    def OnButton3(self, event):
        self.textCtrl2.SetValue(str(self.z))
        #self.parent.textCtrl1.SetValue(str(self.z))


app = wx.App()
frame = A(None)
frame.Show(True)
app.MainLoop()

Как и во втором кадре self.parent = parent, я тоже поместил его в основной кадр. К сожалению, это не сработало. Как я могу передать переменные из второго кадра в основной кадр, нажав Кнопка 2 ?

Любое предложение будет оценено. Спасибо.

1 Ответ

1 голос
/ 03 июля 2019

Проблема в том, что вы не сохраняете указатель на кадр B. С помощью B(self).Show() вы создаете кадр, но нет простого способа обратиться к кадру B из кадра A.

Просто измените способсоздать кадр B. См. измененные методы class A ниже.

def OnButton1(self, event):
    self.x = 5 + self.count
    self.y = 7 + self.count
    self.bFrame = B(self)
    self.bFrame.Show()
    self.count += 1

def OnButton2(self, event):
    self.textCtrl1.SetValue(str(self.bFrame.z))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...