python Tk接口:NameError:未定义全局名称“box1”

时间:2012-04-25 13:15:24

标签: python tkinter tk

from Tkinter import *
import MySQLdb

def tran() :
 first= Tk()

 label1 = Label(first ,text="From")
 label1.pack()

 box1=Entry(first )
 box1.pack()

 label2=Label(first ,text="To")
 label2.pack()

 box2=Entry(first )
 box2.pack()

 label3=Label(first ,text="Amt")
 label3.pack()

 box3=Entry(first )
 box3.pack()

 Button1 = Button(first , text="Next", command=func3).pack() 


def func3() :
 conn = MySQLdb.connect (host = "localhost", user = "root", passwd = "natty", db = "dbms")
 cursor=conn.cursor()

 From=int(box1.get().strip())
 To=int(box2.get().strip())
 Amt=int(box3.get().strip())

 cursor.execute ("select bal from account where acc="+str(From)+"")

 a=cursor.fetchone()
 fromval=int(a[0])

 cursor.execute ("select bal from account where acc="+str(To)+"")

 b=cursor.fetchone()
 toval=int(b[0])

 fromval=fromval-Amt
 toval=toval+Amt

 cursor.execute("update account set bal="+str(fromval)+" where acc="+str(From)+"")
 cursor.execute("update account set bal="+str(toval)+" where acc="+str(To)+"")

 cursor.close ()
 conn.close ()

master = Tk()
Button3 = Button(master, text="Transaction", command=tran).pack()
mainloop()

screen shot

“下一步”按钮不起作用。当我点击“下一步”按钮时,我收到以下错误:

File "disp.py", line 24, in func3
    From = int (box1.get().strip())
NameError: global name 'box1' is not defined

我是否必须将按钮放在func3

2 个答案:

答案 0 :(得分:3)

将您的代码更改为:

from Tkinter import *

import MySQLdb

class App:

    def __init__(self, master):
        Button3 = Button(master, text="Transaction", command=self.tran).pack()

    def tran(self) :

        first = Tk()

        label1 = Label(first ,text="From")

        label1.pack()

        self.box1=Entry(first )

        self.box1.pack()

        label2=Label(first ,text="To")

        label2.pack()

        self.box2=Entry(first )

        self.box2.pack()


        label3=Label(first ,text="Amt")

        label3.pack()

        self.box3=Entry(first )

        self.box3.pack()

        Button1 = Button(first , text="Next", command=self.func3).pack() 


    def func3(self) :

        conn = MySQLdb.connect (host = "localhost", user = "root", passwd = "natty", db = "dbms")

        cursor=conn.cursor()

        From=int(self.box1.get().strip())

        To=int(self.box2.get().strip())

        Amt=int(self.box3.get().strip())
        cursor.execute ("select bal from account where acc="+str(From)+"")

        a=cursor.fetchone()

        fromval=int(a[0])

        cursor.execute ("select bal from account where acc="+str(To)+"")

        b=cursor.fetchone()

        toval=int(b[0])

        fromval=fromval-Amt

        toval=toval+Amt

        cursor.execute("update account set bal="+str(fromval)+" where acc="+str(From)+"")

        cursor.execute("update account set bal="+str(toval)+" where acc="+str(To)+"")

        cursor.close ()

        conn.close ()

master = Tk()

app = App(master)

master.mainloop()

我认为这应该有用。

答案 1 :(得分:0)

box1是在tran()函数内部定义的,因此(如错误消息所示)未全局定义。