<p>我稍微整理了一下您的代码,现在它将变量从Main1类传递到其他类</p>
<p>主要的问题是根本没有传递变量。代码中的<code>a=Other_a(self).Show()</code>行实际上是将整个<code>frame</code>赋给了<code>Other_a</code>类。如果要传递<code>x</code>和<code>y</code>值,则可以给出一个列表<code>[self.x, self.y]</code>作为<code>Other_a</code>的<code>foo</code>值</p>
<p>然后,在类<code>Other_a</code>的实例<code>a</code>中,需要一行<code>self.foo = foo</code>。为什么?因为您想在<code>__init__</code>方法之外使用<code>foo</code>的值</p>
<p>同样的情况也发生在<code>b</code>和<code>Other_b</code>上</p>
<p>查看<a href="https://www.tutorialspoint.com/python/python_classes_objects.htm" rel="nofollow noreferrer">here</a>和<a href="https://docs.python.org/3/tutorial/classes.html" rel="nofollow noreferrer">here</a>以了解有关clases如何在Python中工作的更多详细信息</p>
<pre><code>import wx
class Main1(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent=parent)
self.bSizer1 = wx.BoxSizer(wx.VERTICAL)
self.Btn1 = wx.Button(self, wx.ID_ANY, "Btn1", wx.DefaultPosition, wx.DefaultSize, 0)
self.bSizer1.Add(self.Btn1, 1, wx.ALL|wx.EXPAND, 5)
self.SetSizer(self.bSizer1)
self.Btn1.Bind(wx.EVT_BUTTON, self.btn1_f)
def btn1_f(self, event):
print("here 1")
self.x = 12
self.y = 30
a = Other_a([self.x, self.y])
a.Show()
b = Other_b(self.x)
b.Show()
class Other_a(wx.Frame):
def __init__(self, foo):
self.foo = foo
wx.Frame.__init__(self, None)
self.bSizer2 = wx.BoxSizer(wx.VERTICAL)
self.Btn2 = wx.Button(self, wx.ID_ANY, "Btn 2a", wx.DefaultPosition, wx.DefaultSize, 0)
self.bSizer2.Add(self.Btn2, 0, wx.ALL|wx.EXPAND, 5)
self.SetSizer(self.bSizer2)
self.Btn2.Bind(wx.EVT_BUTTON, self.btn2_f)
print("here 2")
print(self.foo[0])
def btn2_f(self, event):
print("here 3")
print(self.foo[1])
class Other_b(wx.Frame):
def __init__(self, x):
self.x = x
wx.Frame.__init__(self, None)
self.bSizer3 = wx.BoxSizer(wx.VERTICAL)
self.Btn3 = wx.Button(self, wx.ID_ANY, "Btn 2b", wx.DefaultPosition, wx.DefaultSize, 0)
self.bSizer3.Add(self.Btn3, 0, wx.ALL|wx.EXPAND, 5)
self.SetSizer(self.bSizer3)
self.Btn3.Bind(wx.EVT_BUTTON, self.btn3_f)
print("here 4")
def btn3_f(self, event):
print("here 5")
print(self.x)
if __name__ == "__main__":
app = wx.App(False)
frame = Main1(None)
frame.Show(True)
app.MainLoop()
</code></pre>