如果您使用类,则不应使用全局变量。相反,您需要访问对象实例的属性和方法。这意味着创建E4
作为实例变量,并通过 GUI 类的实例访问它。
另外,你的数据库应该not继承自mainGUI
。这不是应该如何使用继承。
您对数据库进行了编码,因此需要更改 GUI,这是不寻常的。相反,您的 GUI 应该是唯一可以修改 GUI 的东西,而您的数据库应该是唯一可以修改数据库的东西。当GUI需要向数据库发送信息或从数据库获取信息时,它可以调用数据库上的方法。
因此,第一步是将数据库对象传递给您的mainGUI
类(应该命名为MainGUI
根据 PEP8):
class MainGUI(object):
def __init__(self,window, db):
self.window = window
self.db = db
...
接下来,在创建 GUI 时传入数据库对象:
if __name__ == "__main__":
database = Database("dbase.db")
window=Tk()
gui = MainGUI(window, database)
这样,您现在可以使用数据库来获取数据,并使用 GUI 来显示数据。
例如,您的 GUI 应该具有“view_all”方法,因为它涉及更改视图。它应该调用数据库的“get_all”方法。经过not using lambda
,您的代码变得更容易阅读、编写和调试。
class mainGUI(object):
def __init__(self,window, db):
...
self.E4 = Listbox(...)
...
B2 = Button(..., command=self.view_all)
def view_all(self):
data = self.db.get_all()
self.E4.delete(0, END)
for row in data:
self.E4.insert(END,row)
最后,创建一个get_all
方法在你的Database
除了获取并返回数据之外什么也不做:
class MainGUI(object):
def get_all(self):
self.curs.execute("SELECT * FROM diary")
data = self.curs.fetchall()
return data
有了上述所有内容,并将相同的概念应用于其他方法之后(即:Database
类应该只设置或获取数据),你有一个可重用的Database
完全独立于使用它的 GUI 的类。