python - Python Tkinter OOP 继承
问题描述
我正在尝试将一些值从一个类继承到另一个类。我正在使用函数 super 来继承。下面是我的问题的简化版本。谢谢你的帮助。
from tkinter import *
import random
class First(object):
def __init__(self,master):
super(First, self).__init__(master)
def random(self):
self._y = random.randint(11,20)
self._x = random.randint(1,10)
def random2(self):
s = First(root)
s.random()
class Second(Frame,First):
def __init__(self,master):
super(Second, self).__init__(master)
self.grid()
self.menuFrame = Frame(self)
self.create_menu_widgets()
self.menuFrame.grid()
def create_menu_widgets(self):
btnMainMenu = Button(self.menuFrame,font=("consolas",18,"bold"),text="Main Menu")
btnMainMenu.pack()
def print(self):
print(self._y,self._x)
root = Tk()
x = Second(root)
x.random()
x.random2()
x.print()
root.configure(background = 'green')
root.mainloop()
我不断收到错误:
super(First, self).__init__(master)
TypeError: object.__init__() takes no parameters
请帮助我,我认为问题出在我有 s=First(root) 的地方。感谢帮助。
解决方案
当您调用super
层次结构中最高的类时,它将消失object
。object
是 Python 中所有对象的超类。因此super(First, self).__init__(master)
将尝试初始化object
您的任何类。您可以使用Class.__mro__
. 弄清楚我在说什么。
并从对象继承?即使您没有指定任何内容,默认情况下也会发生这种情况。所以我想你想继承Frame
asobject
没有任何意义。
因此,将您的代码更改为此,它应该是固定的。
from tkinter import *
import random
class First(Frame): # changed here
def random(self):
self._y = random.randint(11,20)
self._x = random.randint(1,10)
def random2(self):
s = First(root)
s.random()
class Second(First): # changed here
def __init__(self,master):
super(Second, self).__init__(master)
self.grid()
self.menuFrame = Frame(self)
self.create_menu_widgets()
self.menuFrame.grid()
def create_menu_widgets(self):
btnMainMenu = Button(self.menuFrame,font=("consolas",18,"bold"),text="Main Menu")
btnMainMenu.pack()
def print(self):
print(self._y,self._x)
root = Tk()
x = Second(root)
x.random()
x.random2()
x.print()
root.configure(background = 'green') # you cannot see this as your button fills everything
root.mainloop()
推荐阅读
- python - numpy.float32 到浮点转换不起作用
- javascript - 获取元素的css定义
- entity-framework - 使用带有复合主键的 .Find 使用 MOQ 和 EFCore 进行单元测试
- kubernetes - 移动或更改卷命名空间
- javascript - NodeJS 和 Express - 子字符串搜索
- c# - 从 SQL Server 检索新插入的 ID 列并使用 c# 在文本框字段中显示
- javascript - 设置时表没有最小高度
- typescript - 与“keyof interface”相比,“keyof typeof value”产生不同的类型结果
- javascript - 箭头函数在 Javascript 对象中的行为如何?
- r - ggplot2中离散变量的累积计数