【问题标题】:Linked Tkinter button to Sqlite3 database using classes使用类将 Tkinter 按钮链接到 Sqlite3 数据库
【发布时间】: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


【解决方案1】:

嗯,我自己想出来的。

我变了

self.createDB = self.db.CreateDatabase

到

self.db.CreateDatabase()

没关系,所有关于更好的代码结构的提示都是有帮助的。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多