<p>我在你的例子中看到了几个问题。你知道吗</p>
<p>一:</p>
<p>将<code>Second()</code>分配给<code>x</code>,然后调用<code>x.random()</code>和<code>x.random2()</code>。这将不起作用,因为您的随机方法只存在于<code>First()</code>类中。你知道吗</p>
<p>二:</p>
<p>不要将函数、方法、变量或属性命名为与内置方法相同的名称。这会引起问题。你知道吗</p>
<p>把你的<code>def print(self)</code>改成<code>def my_print(self)</code>或者其他不完全是<code>print</code>的东西。当我们讨论这个print语句时,您只在<code>First()</code>类中定义<code>self._x</code>和<code>self._y</code>,但尝试在<code>Second()</code>类中打印它们。这是行不通的。<code>self</code>始终是对类对象的引用,而不是对传递给类的类控制器的引用。你知道吗</p>
<p>现在我了解了您在这里要做的事情,我将重建您的代码以展示如何在类之间共享信息。你知道吗</p>
<p>不应在Frame类内部使用“几何体管理器”。而是在类变量名上使用它。这将允许您在类的任何几何图形管理器之间进行选择,而不是只使用一种。你知道吗</p>
<p>正如Vineeth所指出的,对于对象类,不能使用supper。你知道吗</p>
<p>下面的代码将运行<code>Second()</code>类,然后当您想引用<code>First()</code>类上的随机方法时,您可以使用我添加到<code>Second()</code>的新方法来实现。如果你有任何问题,请告诉我。你知道吗</p>
<p>最后一个更改是将tkinter作为<code>tk</code>导入,这将有助于防止意外地覆盖从tkinter导入的方法。你知道吗</p>
<p>下面是代码的工作示例:</p>
<pre><code>import tkinter as tk
import random
class First(object):
def random(self):
return "From First.Random!", random.randint(11,20), random.randint(1,10)
def random2(self):
return "From First.Random2!", self.random()
class Second(tk.Frame):
def __init__(self, master):
super(Second, self).__init__(master)
self.menuFrame = tk.Frame(self)
self.menuFrame.grid()
tk.Button(self.menuFrame, font=("consolas", 18, "bold"), text="Main Menu").pack()
def random(self):
print(First().random())
def random2(self):
print(First().random2())
root = tk.Tk()
root.configure(background='green')
x = Second(root)
x.pack()
x.random()
x.random2()
root.mainloop()
</code></pre>