Я вижу несколько проблем в вашем примере.
1:
вы назначаете Second()
на x
, но затем вызываете x.random()
и x.random2()
.Это не будет работать, так как ваши случайные методы существуют только в классе First()
.
2:
Не называйте функцию, метод, переменную или атрибут так же, как встроенныйметод.Это вызовет проблемы.
Измените def print(self)
на что-то вроде def my_print(self)
или что-то, что не совсем print
.Пока мы говорим об этом операторе печати, вы только определяете self._x
и self._y
в своем классе First()
, но пытаетесь распечатать их в своем классе Second()
.Это никогда не сработает.self
всегда является ссылкой на объект класса и никогда не является ссылкой на контроллер класса, который был передан в класс.
Теперь я получаю то, что вы пытаетесь сделать здесь, и я перестрою ваш код, чтобы показатькак делиться информацией между классами.
Вы не должны использовать менеджер геометрии внутри класса Frame.Вместо этого используйте его в имени переменной класса.Это позволит вам выбирать между любым менеджером геометрии для класса вместо того, чтобы придерживаться только одного вида.
Как указывал Вайнс, вы не используете ужин для класса объекта.
Приведенный ниже код будетзапустите класс Second()
, а затем, когда вы захотите сослаться на случайные методы в классе First()
, вы можете сделать это с помощью новых методов, которые я добавил в Second()
.Дайте мне знать, если у вас есть какие-либо вопросы.
Последнее изменение - импорт tkinter как tk
. Это поможет предотвратить случайную перезапись импортированного метода из tkinter.
Вот рабочий примерВаш код:
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()