使用SQLITE/PYTHON插入用户和密码

使用SQLITE/PYTHON插入用户和密码,python,sqlite,tkinter,Python,Sqlite,Tkinter,使用具有用户和密码的组程序。我们正试图通过python将用户和密码插入sqlite。但是在我们的图形窗口弹出一个应该发送数据的按钮之前,我们只发送空白数据。我们尝试了在多个网站上发现的不同变体,但似乎没有任何效果 from tkinter import * import sqlite3 import sys conn = sqlite3.connect('indexCards.db') cur = conn.cursor() users ={} def addUser(entUsern

使用具有用户和密码的组程序。我们正试图通过python将用户和密码插入sqlite。但是在我们的图形窗口弹出一个应该发送数据的按钮之前,我们只发送空白数据。我们尝试了在多个网站上发现的不同变体,但似乎没有任何效果

from tkinter import *
import sqlite3
import sys




conn = sqlite3.connect('indexCards.db')
cur = conn.cursor()
users ={}

def addUser(entUsername, entPassword):

    #global entUsername, entPassword
    NAME = entUsername.get()
    PASSWORD = entPassword.get()
    print("add User") #this is testing only
    print(NAME, PASSWORD) # this is testing to see the passed variable
    //
   //This is where we are having the issues
    conn.executemany('INSERT INTO USER(NAME,PASSWORD)\
          VALUES (? ,?);', [(NAME,PASSWORD)])
    conn.commit();

    return (NAME, PASSWORD)


def makeWindow():
    global entUsername, entPassword
    window = Tk()
    window.title('Add New User')

    lblInst = Label(window, text = "Create your account here:", font=("Helvetica",16))
    lblInst.pack()
    lblUsername = Label(window, text="Please enter a username: ")
    entUsername = Entry(window)
    lblUsername.pack()
    entUsername.pack()


    lblPassword = Label(window, text="Please enter a password: ")
    entPassword = Entry(window)

    lblPassword.pack()
    entPassword.pack()


    btn = Button(window, text="Create", command=addUser(entUsername, entPassword))

    btn.pack()
    print (addUser(entUsername, entPassword))
    print('entUsername', 'entPassword')

    #window.mainloop()

    return window



#if __name__ == '__main__':
 #   main():

window = makeWindow()
window.mainloop()

问题是,在用户有机会输入任何数据之前,您正在立即调用该函数


请参见

它立即调用该方法而按下按钮不起任何作用的原因是addUser(entUsername,entPassword)被计算,其返回值作为按钮的命令。因此,如果addUser打印一些内容来告诉您它已运行,但未返回任何内容,则只需运行addUser来评估其返回值,并将None作为按钮的命令。
要使用按钮调用具有不同参数的函数,您可以使用全局变量,尽管我不建议这样做:

import sqlite3
from tkinter import *

conn = sqlite3.connect('indexCards.db')
cur = conn.cursor()
users = {}
cur = conn.cursor()
cur.execute('''
Create table if not exists USER(NAME varchar(100), PASSWORD varchar(100))
''')


def addUser():
    NAME = entUsername.get()
    PASSWORD = entPassword.get()
    print("add User")  # this is testing only
    print(NAME, PASSWORD)  # this is testing to see the passed variable
    # This is where we are having the issues
    conn.executemany('INSERT INTO USER(NAME,PASSWORD) VALUES (? ,?);', [(NAME, PASSWORD)])
    conn.commit()

    return (NAME, PASSWORD)


def makeWindow():
    global entUsername
    global entPassword
    window = Tk()
    window.title('Add New User')

    lblInst = Label(window, text="Create your account here:", font=("Helvetica", 16))
    lblInst.pack()
    lblUsername = Label(window, text="Please enter a username: ")
    entUsername = Entry(window)
    lblUsername.pack()
    entUsername.pack()

    lblPassword = Label(window, text="Please enter a password: ")
    entPassword = Entry(window)

    lblPassword.pack()
    entPassword.pack()

    btn = Button(window, text="Create", command=addUser)

    btn.pack()
    print(addUser())

    window.mainloop()

    return window

window = makeWindow()

如果不想创建全局函数,则可以将带有多个参数的函数传递给匿名函数,即lambda函数

btn = Button(window, text="Create", command= lambda : addUser(entUsername, entPassword))

conn.executemany('INSERT-INTO-USER(NAME,PASSWORD)\\值(?,;,[(NAME,PASSWORD)])
->
conn.executemany('INSERT-INTO-USER(NAME,PASSWORD)值(?,;,(NAME,PASSWORD))
。但你们真的要把纯文本密码存储到数据库中吗?这个程序其实并不需要安全性,因为它只是一个类。我们真的不需要用户和密码,我只需要能够将信息发送到sql数据库而不需要为空。非常感谢您提供链接,我们能够修复我们的程序@亚伦:如果你觉得这很有帮助,请阅读《欢迎来到堆栈溢出》。没有任何解释的代码转储很少有帮助。堆栈溢出是关于学习,而不是提供盲目复制和粘贴的代码片段。请回答您的问题,并解释它如何比OP提供的更好地工作。