【发布时间】:2021-02-21 12:07:37
【问题描述】:
我正在尝试使用支持 sqlite3 数据库的 Tkinter GUI。我想用我的 Tkinter 窗口上的按钮来控制数据库。 我也在弄清楚如何在使用类时改进我的代码。 但是,如果我按下“创建数据库”按钮,则不会将表插入到数据库中。
按照我的代码:
import sqlite3
import datetime
import os.path
import tkinter as tk
from tkinter import *
from tkinter import messagebox
from tkinter.ttk import Treeview, Separator
class MainApplication():
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.master.title('Titanic DB')
self.master.geometry('850x600')
self.master.resizable(False, False)
self.search_frame = tk.Frame(self.master).grid(row=0, column=0)
self.label_search_heading = tk.Label(self.search_frame, text='DATABASE |', font=('bold', 14), pady=10).grid(row=0, column=0, sticky=W)
self.button_create_database = tk.Button(self.search_frame, text='create database', command=self.ActionButtons, font=('bold', 14), pady=5, padx=50).grid(row=20, column=0, sticky=W)
def ActionButtons(self):
self.db = Database()
self.createDB = self.db.CreateDatabase
class Database():
DATABASE = "TitanicPassengers.db"
def __init__(self):
self.connection = sqlite3.connect(Database.DATABASE)
self.cursor = self.connection.cursor()
def CreateDatabase(self):
self.connection = sqlite3.connect(Database.DATABASE)
self.cursor = self.connection.cursor()
self.execute("CREATE TABLE IF NOT EXISTS Passengers(Survived INTEGER, " \
"PClass INTEGER, " \
"Name TEXT, " \
"Sex TEXT, " \
"Age INTEGER, " \
"SiblingsSpousesAbord INTEGER, " \
"ParentsChildrenAbord INTEGER, " \
"Fare REAL ) "
)
self.connection.commit()
self.connection.close()
def main():
root = tk.Tk()
app = MainApplication(root)
root.mainloop()
if __name__ == '__main__':
main()
如果有人可以给我一个提示,我会很高兴,我做错了什么。 非常感谢所有如何更好地组织我的代码的其他提示。 谢谢!
【问题讨论】:
-
顺便说一句,您没有在框架内创建
<tk.Label>和<tk.Button>。将此行拆分:self.search_frame = tk.Frame(self.master).grid(row=0, column=0)in 2。.grid方法始终返回None。 -
知道了!谢谢!
-
由于缺少
(),您实际上并未在self.createDB = self.db.CreateDatabase行中执行CreateDatabase()函数。应该是self.createDB = self.db.CreateDatabase()。
标签: python sqlite class tkinter