tkinter/sql全局错误帮助。
我在使用tkinter和MySQL时遇到了另一个障碍。在上一篇文章之后,我现在能够有一个用户登录,当输入用户名和密码时,就可以成功地建立MySQL连接。现在的问题是"游标不是全局的",我不确定如何做到这一点,或者如何纠正这段代码。因此,在登录并从根窗口中单击"下一步"按钮后,我收到错误消息。
选择 | 换行 | 行号
- from Tkinter import *
- import sys
- import MySQLdb
- # Toplevel window that opens when "NEXT" button is clicked in "NextWindow" widget
- def NewWindow():
- win = Toplevel()
- # entry boxes put in a frame, text stored in variables k, l
- ent_frame = Frame(win)
- Label(ent_frame, text="ITEM:").pack(side=LEFT)
- k = Entry(ent_frame, width=15)
- k.pack(side=LEFT)
- Label(ent_frame, text="BRAND:").pack(side=LEFT)
- l = Entry(ent_frame, width=15)
- l.pack(side=LEFT)
- ent_frame.pack()
- # using get method for entry boxes above
- def SaveIt():
- m = k.get()
- n = l.get()
- # executing a sql command and inserting m,n
- cursor.execute ("""INSERT INTO info (item, brand) VALUES("%s", "%s")"""% (m,n))
- print "Number of rows inserted: %d" % cursor.rowcount
- conn.close()
- Button(win, text="Save",command=SaveIt).pack(side=BOTTOM)
- Button(win, text="Next", command=win.destroy).pack(side=BOTTOM)
- # Toplevel window that opens when "Next" is clicked from root window.
- def NextWindow():
- win = Toplevel()
- # entry boxes put in a frame, text stored in variables c,d
- ent_frame = Frame(win)
- Label(ent_frame, text="CITY:").pack(side=LEFT)
- c = Entry(ent_frame, width=15)
- c.pack(side=LEFT)
- Label(ent_frame, text="STATE:").pack(side=LEFT)
- d = Entry(ent_frame, width=15)
- d.pack(side=LEFT)
- ent_frame.pack()
- # using get method for entry boxes
- def SaveThis():
- h = c.get()
- j = d.get()
- # executing a sql command and inserting h,j
- cursor.execute ("""INSERT INTO info (city, state) VALUES("%s", "%s")"""% (h,j))
- print "Number of rows inserted: %d" % cursor.rowcount
- conn.close()
- # Click 'save' run 'SaveThis' and executes sql command. 'Next' opens toplevel
- Button(win, text="Save",command=SaveThis).pack(side=BOTTOM)
- Button(win, text="Next", command=NewWindow).pack(side=BOTTOM)
- # Takes text entered in root window of user & pass and enters them in sql connect
- def SaveData():
- f = a.get()
- g = b.get()
- try:
- conn = MySQLdb.connect (host = "localhost",
- user = "%s" % (f),
- passwd = "%s" % (g),
- db = "maindb")
- # error if wrong username or password
- except MySQLdb.Error, e:
- print "Error %d: %s" % (e.args[0], e.args[1])
- sys.exit (1)
- cursor = conn.cursor ()
- root = Tk()
- # frame containing 2 entries which will be stored in variables a,b
- ent_frame = Frame(root)
- Label(ent_frame, text="USERNAME:").pack(side=LEFT)
- a = Entry(ent_frame, width=15)
- a.pack(side=LEFT)
- Label(ent_frame, text="PASSWORD:").pack(side=LEFT)
- b = Entry(ent_frame, width=15)
- b.pack(side=LEFT)
- ent_frame.pack()
- # Clicking 'login' runs 'SaveData' and passes info into sql and connects with
- # username and password.
- Button(root, text="Login",command=SaveData).pack(side=BOTTOM)
- # opens a toplevel window with more entry fields
- Button(root, text="Next", command=NextWindow).pack(side=BOTTOM)
- mainloop()