2012-04-25 3 views
0
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питон Tk интерфейса: NameError: глобальное имя «box1» не определен

Следующая кнопка не работает .when я нажмите кнопку «Далее» Я получаю следующее сообщение об ошибке:

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

Если я должен разместить кнопку внутри FUNC3

+0

Я не знаю, является ли это копией/вставкой, но вы действительно должны отступать от кода python с четырьмя пробелами. Это делает ошибки отступов более легкими для определения в качестве бонуса. –

+0

Из любопытства попробовал PythonTidy, вот [prettified code] (http://ideone.com/SCJIv). Мне пришлось заменить двойные строки. – KurzedMetal

ответ

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() 

Я думаю, что должно работать.

+0

Это не сработает, если функции не определены в классах, у которых нет оснований полагать, что они есть. (Это просто вызовет ошибку, когда 'self' не будет определен). Даже если функции определены внутри классов, 'self' должен быть первым аргументом для функций. – mgilson

+0

Спасибо @mgilson! Я изменил код соответственно. – SuperPrograman

+0

@SuperProgramam При быстром взгляде это выглядит намного лучше. – mgilson

0

box1 была определена внутри функции тран(), и, таким образом, (как сказано в сообщении об ошибке) не определена глобально.

+0

Должен ли я объявить box1 внутри func3 –

+0

Объявление его в func3() будет означать, что ссылка, вызывающая ошибку, теперь будет в РАЗЛИЧНОЙ коробке1 (одна локальная для func3). Посмотрите здесь объяснение обмена переменными между функциями: http://stackoverflow.com/q/423379/535275 –

+0

@ user1190883 Ссылка, доступная ScottHunter, хороша и, вероятно, доставит вас туда, куда вам нужно. Лучше всего это сделать, чтобы упаковать все это в класс, и в этом случае общая информация передается через экземпляр класса без необходимости в глобальных переменных. – mgilson

Смежные вопросы