Python MVC - 尝试将数据从 sqlite 数据库分配到 tkinter 标签小部件
Python MVC - trying to assign data from sqlite database into tkinter label widgets
如何将 sqlite 数据库中的数据附加到 tkinter 中的小部件中,例如标签?目前,我有工作数据库,其中包含一些虚拟数据,但实际上我无法将其中任何一个分配给视图中的标签,以将其呈现给用户。这是一些代码:
型号class
def display_all_employees(self):
connection = sqlite3.connect("employees_database.db")
cursor = connection.cursor()
cursor.execute("""
SELECT name FROM employees
""")
rows = cursor.fetchall()
for row in rows:
print(row)
connection.commit()
cursor.close()
connection.close()
控制器
class Controller:
test_str = ""
def __init__(self):
self.model = Model()
self.view = View(self)
self.employee_database = Database()
def main(self):
self.employee_database.create_database()
self.view.main()
def display_all_employees_data(self):
self.model.display_all_employees(self.test_str)
if __name__ == '__main__':
calculator = Controller()
calculator.main()
查看
class View(tk.Tk):
def __init__(self, controller):
super().__init__()
self.title("Calculator")
self.controller = controller
self._make_main_frame()
self._make_buttons()
self._center_window()
def _make_main_frame(self):
self.main_frame = ttk.Frame(self)
self.main_frame.pack()
btn = ttk.Button(text="print")
btn.pack()
解决方案是您的函数 return 需要发送到视图的数据。由于该函数是由控制器调用的,因此控制器可以获取结果并将其传递给视图。
class Model:
...
def display_all_employees(self):
...
rows = cursor.fetchall()
...
return rows
class Controller:
...
def display_all_employees_data(self):
rows = self.model.display_all_employees(self.test_str)
self.view.update_all_employees(rows)
class View(tk.Tk):
...
def update_all_employees(self, rows):
...
然而,在这种情况下,我会将 display_all_employees
重命名为 get_all_employees
,因为模型不负责显示任何内容,它只负责获取数据。
另一种方法是向控制器添加一个方法,用于将数据发送到视图。假设模型有一个 self.controller
属性,您可以将代码更改为:
class Model:
...
def display_all_empoyees(self):
...
rows = cursor.fetchall()
self.controller.update_all_employees(rows)
...
class Controller:
...
def display_all_employees_data(self):
self.model.display_all_employees(self.test_str)
def update_all_employees(self, rows):
self.view.update_all_employees(rows)
如何将 sqlite 数据库中的数据附加到 tkinter 中的小部件中,例如标签?目前,我有工作数据库,其中包含一些虚拟数据,但实际上我无法将其中任何一个分配给视图中的标签,以将其呈现给用户。这是一些代码:
型号class
def display_all_employees(self):
connection = sqlite3.connect("employees_database.db")
cursor = connection.cursor()
cursor.execute("""
SELECT name FROM employees
""")
rows = cursor.fetchall()
for row in rows:
print(row)
connection.commit()
cursor.close()
connection.close()
控制器
class Controller:
test_str = ""
def __init__(self):
self.model = Model()
self.view = View(self)
self.employee_database = Database()
def main(self):
self.employee_database.create_database()
self.view.main()
def display_all_employees_data(self):
self.model.display_all_employees(self.test_str)
if __name__ == '__main__':
calculator = Controller()
calculator.main()
查看
class View(tk.Tk):
def __init__(self, controller):
super().__init__()
self.title("Calculator")
self.controller = controller
self._make_main_frame()
self._make_buttons()
self._center_window()
def _make_main_frame(self):
self.main_frame = ttk.Frame(self)
self.main_frame.pack()
btn = ttk.Button(text="print")
btn.pack()
解决方案是您的函数 return 需要发送到视图的数据。由于该函数是由控制器调用的,因此控制器可以获取结果并将其传递给视图。
class Model:
...
def display_all_employees(self):
...
rows = cursor.fetchall()
...
return rows
class Controller:
...
def display_all_employees_data(self):
rows = self.model.display_all_employees(self.test_str)
self.view.update_all_employees(rows)
class View(tk.Tk):
...
def update_all_employees(self, rows):
...
然而,在这种情况下,我会将 display_all_employees
重命名为 get_all_employees
,因为模型不负责显示任何内容,它只负责获取数据。
另一种方法是向控制器添加一个方法,用于将数据发送到视图。假设模型有一个 self.controller
属性,您可以将代码更改为:
class Model:
...
def display_all_empoyees(self):
...
rows = cursor.fetchall()
self.controller.update_all_employees(rows)
...
class Controller:
...
def display_all_employees_data(self):
self.model.display_all_employees(self.test_str)
def update_all_employees(self, rows):
self.view.update_all_employees(rows)