当我在tkinter上单击Add时,它不会在数据库中添加任何内容,我不知道sqlite3很多。

我的数据库文件:

import sqlite3
from sqlite3 import *
conn = sqlite3.connect("connects.db")
print("Opened database successfully")
cursor = conn.cursor()

def createTable():
    conn.execute('''CREATE TABLE IF NOT EXISTS contactlist
             (ID INTEGER PRIMARY KEY AUTOINCREMENT,
             NAME         TEXT    NOT NULL,
             PHONE        INT     NOT NULL);''')

    print ("Table created successfully")


cursor.close()
conn.commit()
conn.close()

Python档案:

from tkinter import *
from tkinter import messagebox
import os
from DatabaseFile import *
import sqlite3

def selection () :
    print ("At %s of %d" % (select.curselection(), len(contactlist)))
    return int(select.curselection()[0])

def addContact() :
    conn = sqlite3.connect('connects.db')
    cursor = conn.cursor()
    entry = (nameVar.get(), phoneVar.get())
    try:
        def insertContact(entry):
            conn.execute('INSERT INTO contactlist (NAME, PHONE) VALUES (?,?)', (entry))
            conn.commit()
            print('record inserted in data')
    except:
        messagebox.showwarning("Field cannot be blank","Please enter a value in both the fields.")
    else:
        setList()


def updateContact() :
    contactlist[selection()]=[nameVar.get(), phoneVar.get()]
    setList ()

def deleteContact() :
    del contactlist[selection()]
    setList ()

def loadContact  () :
    name, phone = contactlist[selection()]
    nameVar.set(name)
    phoneVar.set(phone)

def saveContact  () :
    fobj = open("contacts.py", "w")
    fobj.write("contactlist = [")
    for items in contactlist:
        fobj.write(str(items))
        fobj.write(",")
        fobj.write("\n")
    fobj.write("]")

def exitContact  () :
    app_title = "Contacts"
    if (messagebox.askokcancel(title = app_title, \
        message = "Do you want to exit, OK or Cancel") == 1) :
        os._exit(1)

def buildFrame () :
    global nameVar, phoneVar, select
    root = Tk()
    root.title('My Contact List')

    frame1 = Frame(root)
    frame1.pack()

    Label(frame1, text="Name:").grid(row=0, column=0, sticky=W)
    nameVar = StringVar()
    name = Entry(frame1, textvariable=nameVar)
    name.grid(row=0, column=1, sticky=W)

    Label(frame1, text="Phone:").grid(row=1, column=0, sticky=W)
    phoneVar= StringVar()
    phone= Entry(frame1, textvariable=phoneVar)
    phone.grid(row=1, column=1, sticky=W)

    frame1 = Frame(root)       # add a row of buttons
    frame1.pack()
    btn1 = Button(frame1,text=" Add  ",command=addContact)
    btn2 = Button(frame1,text="Update",command=updateContact)
    btn3 = Button(frame1,text="Delete",command=deleteContact)
    btn4 = Button(frame1,text=" Load ",command=loadContact)
    btn5 = Button(frame1,text=" save ",command=saveContact)
    btn6 = Button(frame1,text=" exit ",command=exitContact)
    btn1.pack(side=LEFT); btn2.pack(side=LEFT)
    btn3.pack(side=LEFT); btn4.pack(side=LEFT)
    btn5.pack(side=LEFT); btn6.pack(side=RIGHT)

    frame1 = Frame(root)       # allow for selection of names
    frame1.pack()
    scroll = Scrollbar(frame1, orient=VERTICAL)
    select = Listbox(frame1, yscrollcommand=scroll.set, height=7)
    scroll.config (command=select.yview)
    scroll.pack(side=RIGHT, fill=Y)
    select.pack(side=LEFT,  fill=BOTH)
    return root

def setList() :
    global contacts
    contacts = readContacts()
    # sort the list
    contacts.sort(key = lambda x : x[1])
    # delete all elements from the select element
    select.delete(0, END)
    # insert each name from the list to the end of the              # select
        # element
    for id, name, phone in contacts :
        select.insert(END, name)

def readContacts():
    contactlistss = []
    cursor.execute("SELECT * FROM contactlist")
    rows = cursor.fetchall()
    for row in rows:
        contactlistss = row
    return contactlistss



# the main program
# initialize the application by building the GUI elements
root = buildFrame()
# initialize the database
createTable()
# set the contents of the list initially
setList()
to keep the program from exiting
root.mainloop()
# end of program

当单击tkinter上的添加按钮时,它给了我空白的输出,这意味着它没有在数据库中插入任何内容

===============>>#1 票数:0

try/except内部,您定义def insertContact(entry):但从不执行此功能。 但是您可以将代码直接放在try/excet

try:
    conn.execute('INSERT INTO contactlist (NAME, PHONE) VALUES (?,?)', (entry))
    conn.commit()
    print('record inserted in data')
except Exceptiona as ex:
    print('Ex:', ex)
    messagebox.showwarning("Field cannot be blank","Please enter a value in both the fields.")
else:
    setList()

顺便说一句:我检查了所有代码,然后进行了更改。 并非所有作品都可以-即。 Update有问题。

我将所有查询移到DatabaseFile.py并且只打开数据库一次,直到程序结束才关闭它。

我将lower_case_names用于函数和变量。 请参阅: PEP 8-Python代码样式指南

我删除了import * -另请参阅PEP 8-Python代码样式指南


DatabaseFile.py

import sqlite3


conn = None # default value at start 


def open():
    global conn

    conn = sqlite3.connect("connects.db")
    print("Opened database successfully")


def close():
    if conn is not None:
        conn.close()


def create_table():
    cursor = conn.cursor()

    cursor.execute('''CREATE TABLE IF NOT EXISTS contactlist
        (ID INTEGER PRIMARY KEY AUTOINCREMENT,
         NAME         TEXT    NOT NULL,
         PHONE        INT     NOT NULL);''')

    conn.commit()

    print("Table created successfully")


def read_contacts():
    cursor = conn.cursor()

    cursor.execute("SELECT * FROM contactlist ORDER BY id")

    return cursor.fetchall()


def add_contact(name, phone):
    cursor = conn.cursor()

    cursor.execute('INSERT INTO contactlist (NAME, PHONE) VALUES (?,?)', (name, phone))

    conn.commit()

    print('record inserted in data')

main.py

import os
import tkinter as tk
from tkinter import messagebox
import DatabaseFile as db

def selection():
    print("At %s of %d" % (select.curselection(), len(contacts)))
    return int(select.curselection()[0])

def add_contact():
    try:
        db.add_contact(name_var.get(), phone_var.get())
    except Exception as ex:
        print('Ex:', ex)
        messagebox.showwarning("Field cannot be blank", "Please enter a value in both the fields.")
    else:
        set_list()

def update_contact():
    contacts[selection()] = [name_var.get(), phone_var.get()]
    set_list()

def delete_contact():
    del contacts[selection()]
    setList()

def load_contact():
    _, name, phone = contacts[selection()]
    name_var.set(name)
    phone_var.set(phone)

def save_contact():
    fobj = open("contacts.py", "w")
    fobj.write("contactlist = [")
    for items in contacts:
        fobj.write(str(items))
        fobj.write(",")
        fobj.write("\n")
    fobj.write("]")

def exit_contact():
    result = messagebox.askokcancel(title="Contacts", message="Do you want to exit, OK or Cancel")
    if result == 1:
        exit(1)

def build_frame():
    global name_var
    global phone_var
    global select

    root = tk.Tk()
    root.title('My Contact List')

    # ---

    frame_form = tk.Frame(root)
    frame_form.pack()

    tk.Label(frame_form, text="Name:").grid(row=0, column=0, sticky='w')

    name_var = tk.StringVar()
    name = tk.Entry(frame_form, textvariable=name_var)
    name.grid(row=0, column=1, sticky='w')

    tk.Label(frame_form, text="Phone:").grid(row=1, column=0, sticky='w')

    phone_var = tk.StringVar()
    phone = tk.Entry(frame_form, textvariable=phone_var)
    phone.grid(row=1, column=1, sticky='w')

    # ---

    frame_buttons = tk.Frame(root)
    frame_buttons.pack()

    btn1 = tk.Button(frame_buttons, text=" Add  ", command=add_contact)
    btn2 = tk.Button(frame_buttons, text="Update", command=update_contact)
    btn3 = tk.Button(frame_buttons, text="Delete", command=delete_contact)
    btn4 = tk.Button(frame_buttons, text=" Load ", command=load_contact)
    btn5 = tk.Button(frame_buttons, text=" Save ", command=save_contact)
    btn6 = tk.Button(frame_buttons, text=" Exit ", command=exit_contact)
    btn1.pack(side='left') 
    btn2.pack(side='left')
    btn3.pack(side='left') 
    btn4.pack(side='left')
    btn5.pack(side='left')
    btn6.pack(side='right')

    # ---

    frame_list = tk.Frame(root)
    frame_list.pack()

    scroll = tk.Scrollbar(frame_list, orient='vertical')
    select = tk.Listbox(frame_list, yscrollcommand=scroll.set, height=7)
    scroll.config(command=select.yview)
    scroll.pack(side='right', fill='y')
    select.pack(side='left', fill='both')

    return root

def set_list() :
    global contacts

    contacts = db.read_contacts()

    select.delete(0, 'end')

    #for item in contacts:
    #    select.insert('end', item)

    select.insert('end', *contacts) # need star *  to insert all items at once

# --- main ---

contacts = [] # default value at start

# ---

db.open() # open once before program
db.create_table()

root = build_frame()

set_list()

root.mainloop()

db.close() # close after closing program

  ask by Wajahat Ansari translate from so

未解决问题?本站智能推荐:

1回复

将tkinter输出保存到sqlite3数据库

我对编程还很陌生,我正在尝试将tkinter输入框的输入保存到sqlite数据库中的字段中。 但是,无论如何,我总是将其保存为PY_VAR(number)的变体,或仅打印为{}。 这是代码的相关部分(SQL查询在数据库上下文中均有效)。 我将如何纠正此问题,以便将输入条目保存到SQL数据库
1回复

显示整个数据库数据tkinter sqlite3

我试图在窗口上打印数据库中的历史记录,但是我的程序仅显示两行(甚至没有排序)。 有什么问题? 打印时,我可以正确获取数据,但无法在窗口上获取它们。 对我而言,这没有任何意义。
1回复

无法从sqlite3数据库填充Tkinter列表框

我在python 3.6.6中制作了一个简单的Tkinter GUI,我无法从数据库中获取数据来填充列表框。 图片: https : //imgur.com/sMou0MQ 我怎么了 当我想用来自sqlite3数据库的现有数据填充列表框时,我单击“刷新数据”按钮,遇到错误。 我的
1回复

使用tkinter从sqlite3数据库输出文本

我已经建立了一个数据库并添加了一些随机细节。 我已经从数据库中提取了这些数据,并且需要在Tkinter GUI窗口中将其输出。 当使用Label输出内容时,通常会放置文本。 还有其他我应该使用的东西而不是标签吗?
1回复

在Sqlite3数据库中插入条目值

我正在使用tkinter创建一个货币转换器,作为我大学项目的一部分。 我是python的GUI新手。 我正在尝试将用户在条目(此处为e1)中输入的值插入我的sqlite3数据库(此处为con)的表中,但是即使按照他们在[...]中显示的方式进行操作,我也无法使其正常工作教程。 我收到一个错
1回复

如何使用tkinter Python创建搜索表单以从SQLITE3数据库进行搜索?

我想使用Tkinter创建一个搜索表单,用户可以在其中输入他们想要从SQLite3数据库中看到的名称。 名为New_Assignment的数据库包含有关人员的所有详细信息。 但是我对如何将Tkinter连接到数据库并使用名称进行搜索感到困惑? 到目前为止,这就是我所得到的。
1回复

通过按下按钮Tkinter / sqlite从条目标签插入数据库

这是我在Tkinter中的标签和输入框(仅用于客户名称,其他输入看起来相似)。 我的目标是在此输入框中键入一些单词,然后通过按“保存”按钮将其插入数据库。 我想用来将输入保存到数据库中的按钮。 这是我在SQLAlchemy中用于客户表的类。 我想我需要使用游标和“插入到
1回复

因此,基本上我需要将用户输入的数据放入Tkinter输入框中,并将其存储到我的sqlite3数据库中。 我正在使用Python 3.6

“ DataEntry():”中的所有条目将作为新记录进入帐户表。 我不知道如何使用sqlite3将Tkinter登录框中的条目作为值传递给SQL'INSERT INTO'语句,它确实可以在仅将控制台用作输入值的方法之前工作,但这使具有供用户使用的GUI。
1回复

将用户输入从Tkinter小部件传输到SQLite数据库

我是一个尝试使用Tkinter和SQLite的新Python用户(v3.5)。 我在将用户输入从小部件(组合框和旋转框)输入到变量,然后将这些变量输入到SQLite数据库时遇到问题。 我已经尝试过自己诊断问题,并且我相信问题在于将数据从小部件获取到变量中。 我已经修改了代码,并在网上搜索解
1回复

如何使用GUI Tkinter在Python中以特定格式显示来自数据库sqlite3的信息?

我试图从数据库中检索信息并以某种特定方式显示它: 名称:蝙蝠侠 价钱:£18 但是我收到此错误:“ TypeError:'int'对象不可下标。” 我该如何解决?