Sqlite使用for循环将值插入表中

时间:2016-12-01 00:51:16

标签: python sqlite

我正在制作一个投票系统并进行设置,以便用户可以立即将所有候选人放入Tkinter Entry中的位置,并用逗号分隔,然后按一个按钮,为那些候选人创建该位置的新投票。 / p>

以下是我认为相关的代码。

# positions drop down
        newVoteChoosePositionLabel = Label(admin, text="Choose the position you are voting for", font=("Arial", 12))
        newVoteChoosePositionLabel.place(x=265, y=170)
        position = StringVar(admin)
        position.set("Chief")
        newVoteOption = OptionMenu(admin, position, "Chief", "First Lieutenant", "Second Lieutenant", "Third Lieutenant",
                                   "Fourth Lieutenant")
        newVoteOption.place(x=355, y=195)

        #add candidates
        addCandLabel = Label(admin, text="Add candidates below, separate each candidate with a comma then press enter when all candidates have been entered"
                             , font=("Arial", 11), wraplength=300, anchor=W)
        addCandLabel.place(x=255, y=235)
        addCandEntry = Entry(admin, width=40)
        addCandEntry.place(x=272, y=295)

        #new vote
        newVoteButton = Button(admin, text="Create Vote", width=15)
        newVoteButton.place(x=335, y=325)

        def newVote(event):
            pos = position.get()
            candidates = addCandEntry.get()
            formatted = [x.strip() for x in candidates.split(',')]
            for x in formatted:
                c.execute("INSERT INTO current VALUES(?,?,?)", pos,x,0)


        addCandEntry.bind("<Return>", newVote)
        newVoteButton.bind("<Button-1>", newVote)

我会把完整的代码放在这篇文章的底部。

我遇到的问题是,每当我点击按钮时,我都会收到错误TypeError: function takes at most 2 arguments (x given),其中x是for循环运行的次数。 我一直无法弄清楚为什么会发生这种情况,因为for循环应该在每次运行时将三个提供的值插入到sqlite表中,所以我不确定为什么它会导致错误的基础上for loop runs。

以下是我的完整代码。小心它是凌乱的

import tkinter
from tkinter import *
import sqlite3
import datetime


# testing purposes only
password = 'test'

# create database file
conn = sqlite3.connect('firefight')
c = conn.cursor()

# create tables
c.execute('''CREATE TABLE IF NOT EXISTS users(
          username text, password text, admin boolean)''')
c.execute('''CREATE TABLE IF NOT EXISTS positions(
          position text)''')
c.execute('''CREATE TABLE IF NOT EXISTS current(
          position text, candidate text, votes int)''')
c.execute('''CREATE TABLE IF NOT EXISTS past(
          date DATE, position text, candidate text, votes int, winner boolean)''')

c.execute("INSERT INTO users VALUES('admin', 'VoteProgram', 'yes')")


'''
tables:
users:
    username text
    password text
    admin boolean
positions:
    position text
current:
    position text
    candidate text
    votes int
past:
    position text
    candidate text
    votes int
    winner boolean
'''

# define root window
root = tkinter.Tk()
root.minsize(width=800, height = 600)
root.maxsize(width=800, height = 600)

# Admin sign in Label
areAdmin = Label(root, text="Administrator sign in", font=("Arial", 18))
areAdmin.pack()

# password label and password
passwordLabel = Label(root, text="Password: ", font=("Arial", 12))
passwordLabel.place(x=300, y=30)

# password entry
adminPasswordEntry = Entry(root)
adminPasswordEntry.place(x=385, y=32.5)

# function for button
def getEnteredPassword(event):
    enteredPassword = adminPasswordEntry.get()
    if enteredPassword == password:
        # define admin window
        admin = tkinter.Toplevel()
        admin.minsize(width=800, height = 600)
        admin.maxsize(width=800, height = 600)
        # label saying to change password
        changePasswordLabel = Label(admin, text="It is recommended to change your password the first time you log in.",
                                    font=("Arial", 16), wraplength=500)
        changePasswordLabel.pack()
        # old password
        changePassword_OldPasswordLabel = Label(admin, text="Old Password: ", font=("Arial", 12))
        changePassword_OldPasswordLabel.place(x=250, y=50)
        changePassword_OldPassword = Entry(admin)
        changePassword_OldPassword.place(x=365, y=52.5)
        # new password
        changePassword_NewPasswordLabel = Label(admin, text="New Password: ", font=("Arial", 12))
        changePassword_NewPasswordLabel.place(x=250, y=70)
        changePassword_NewPassword = Entry(admin)
        changePassword_NewPassword.place(x=365, y=72.5)

        # function to change password
        def passwordChangeCommand(event):
            global password
            oldPasswordValue = changePassword_OldPassword.get()
            newPasswordValue = changePassword_NewPassword.get()
            if oldPasswordValue == password:
                password = newPasswordValue
            else:
                wrong = tkinter.Toplevel()
                wrong.minsize(width=200, height = 100)
                wrong.maxsize(width=200, height = 100)
                Label(wrong, text="Sorry that password is incorrect!", font=("Arial", 24), anchor=W, wraplength=180,
                      fg="red").pack()

        # submit button
        newPasswordSubmit = Button(admin, text="Submit", width=10, command=passwordChangeCommand)
        newPasswordSubmit.place(x=350, y=100)

        newVoteLabel = Label(admin, text="Create New Vote", font=("Arial", 16))
        newVoteLabel.place(x=310, y=135)

        # positions drop down
        newVoteChoosePositionLabel = Label(admin, text="Choose the position you are voting for", font=("Arial", 12))
        newVoteChoosePositionLabel.place(x=265, y=170)
        position = StringVar(admin)
        position.set("Chief")
        newVoteOption = OptionMenu(admin, position, "Chief", "First Lieutenant", "Second Lieutenant", "Third Lieutenant",
                                   "Fourth Lieutenant")
        newVoteOption.place(x=355, y=195)

        #add candidates
        addCandLabel = Label(admin, text="Add candidates below, separate each candidate with a comma then press enter when all candidates have been entered"
                             , font=("Arial", 11), wraplength=300, anchor=W)
        addCandLabel.place(x=255, y=235)
        addCandEntry = Entry(admin, width=40)
        addCandEntry.place(x=272, y=295)

        #new vote
        newVoteButton = Button(admin, text="Create Vote", width=15)
        newVoteButton.place(x=335, y=325)

        def newVote(event):
            pos = position.get()
            candidates = addCandEntry.get()
            formatted = [x.strip() for x in candidates.split(',')]
            for x in formatted:
                c.execute("INSERT INTO current VALUES(?,?,?)", pos,x,0)


        addCandEntry.bind("<Return>", newVote)
        newVoteButton.bind("<Button-1>", newVote)

    else:
        wrong = tkinter.Toplevel()
        wrong.minsize(width=200, height=100)
        wrong.maxsize(width=200, height=100)
        Label(wrong, text="Sorry that password is incorrect!", font=("Arial", 24), anchor=W, wraplength=180,
              fg="red").pack()

# enter button for password
passwordEnterButton = Button(root, text="Enter", width=10)
passwordEnterButton.place(x=360, y=60)
passwordEnterButton.bind("<Button-1>", getEnteredPassword)
root.bind("<Return>", getEnteredPassword)

mainloop()

0 个答案:

没有答案