【发布时间】:2020-05-15 08:12:55
【问题描述】:
假设我有 2 个文件,用于显示 GUI 的 frontend.py 和用于数据库功能的 backend.py。我在使用 super() 继承数据库类时遇到问题。来自 #frontend.py 中 managerPage 类中的 #backend2.py
我有错误:
frame = F(container, self) TypeError: init() 缺少 2 个必需的位置参数:'cn' 和 'cur'
我相信这与我在 managerPage 类中继承的 tk.Frame 类中的 init 有关。我相信 selfService 类(我为自己重命名)归功于用户@BryanOakley。有人可以帮我成功利用 super()。
前端.py。
import backend2
class selfService(tk.Tk, Toplevel):
def __init__(self, *args, **kwargs):
#Toplevel.__init__(self)
self.employeeWindow = None
tk.Tk.__init__(self, *args, **kwargs)
self.container = tk.Frame(self)
self.container.pack(side="top", fill="both",
expand = True)
self.container.grid_rowconfigure(0,
weight=1)
self.container.grid_columnconfigure(0,
weight=1)
self.frames = {}
selfService.restart = False
for F in (StartPage, PageOne, PageTwo):
self.frame = F(self.container, self)
self.frames[F] = self.frame
self.frame.grid(row=0, column=0,
sticky="nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
self.frame = self.frames[cont]
self.frame.tkraise()
class managerPage(tk.Frame,
validation.account_validation,backend2.Database):
def __init__(self, parent, controller, cn, cur):
tk.Frame.__init__(self,parent)
super().__init__(cn, cur)
print(self.cn)
backend2.py
class Database():
def __init__(self):
self.config = {
'user': 'root',
'password': 'root',
'host': 'localhost',
'database': 'myDatabase'}
self.cn =
mysql.connector.connect(**self.config)
self.cur = self.cn.cursor()
【问题讨论】:
-
您使用继承的方式暗示您不应该使用继承。您确定希望每个页面都有自己的独立数据库连接吗?即:如果您有 3 个页面,您将有 3 个不同的数据库连接。这是一个不寻常的设计。
标签: python-3.x oop inheritance tkinter super