2017-05-19 13 views
-1

파이썬과 Tkinter를 사용하여 은행 시스템 용 코드를 작성하고 있습니다. 프로그램을 실행할 때 몇 가지 오류가 발생합니다. 누군가 나를 알아낼 수 있도록 도와 주시겠습니까? 나는 그것에 대해 연구를했지만 문제에 대한 해결책을 찾을 수는 없다. 여기tkinter를 찾을 수 없습니다. AttributeError

...File "C:\Users\stjur\AppData\Local\Programs\Python\Python36-32\lib\tkinter\__init__.py", line 2256, in _setup 
    self.tk = master.tk 
AttributeError: 'function' object has no attribute 'tk' 

그리고 내 코드입니다 :

from tkinter import * 
root=Tk() 
root.title('Avis Banking System') 
def win1(): 
    global balance 
    balance=600 
    global root 
    global tries 
    root=Tk() 
    root.title('Avis banking system') 
    entry_1Var=StringVar() 
    entry_2Var=StringVar() 
    tries=0 

tries=0 
def CheckPass(): 
    global tries 

    if (tries<3): 
     textvalue=entry_1Var.get() 
     textvalue=entry_2Var.get() 
     if textvalue!=('John123') and textvalue!=('Secret'): 
      tries+=1 
      label3=Label(root,text='Try again') 
      label.grid(row=3,column=1,sticky=W,padx=7) 
       else: 
        win2() 
    if (tries==3): 
     label4=Label(root,text='Used all attempts, entry blocked') 
     label4.grid(row=3,column=1, sticky=W,padx=7) 

entry_1Var=StringVar() 
entry_2Var=StringVar() 
b1=Button(root,text='Login',width=5,command=CheckPass) 
b1.grid(row=1,column=10,sticky='e'+'w',padx=7) 
b2=Button(root,text='Reset',width=5,) 
b2.grid(row=2,column=10,sticky='e'+'w',padx=7) 
l1=Label(root,text='Username:').grid(row=1,padx=7,pady=5,sticky='we') 
l2=Label(root,text='Password:').grid(row=2,padx=7,pady=5,sticky='we') 
e1=Entry(root,width=30,textvariable=entry_1Var) 
e1.grid(row=1,column=1,sticky='e'+'w',columnspan=2) 
e2=Entry(root,show='*',width=30,textvariable=entry_2Var) 
e2.grid(row=2,column=1,sticky='e'+'w',columnspan=2) 
logLabel=Label(root,text='Login',font='bold',fg='Grey') 
logLabel.grid(row=0,padx=5,pady=5) 
check=Checkbutton(root,text='Keep me logged in') 
ckeck.grid(row=4,column=1,sticky=W,pady=5) 

if (tries==3): 
    win2 

def win2(): 
    #this is the child window of the main window. 
    win2=Toplevel(root) 
    win2.minsize(width=400,height=400) 
    win2.title("Main Menu") 
    #Label for the the main menu 
    lb=Label(win2,text='N&E Scotland Bank\nMain Menu:',bg='#e6e6e6',height=6).pack(fill=X) 

    btn_1=Button(win2,text='Make Deposit',width=15,height=2,command=win3).pack(pady=5) 
    btn_2=Button(win2,text='Withdrawal',width=15,height=2).pack(pady=5) 
    btn_3=Button(win2,text='Accounts',width=15,height=2).pack(pady=5) 
    btn_4=Button(win2,text='Balance',width=15,height=2).pack(pady=5) 
    btn_5=Button(win2,text='Exit',width=15,height=2).pack(pady=5) 

    def win3():#new window for the button make depost 
    win3=Tk() 
    win3.title('Make Deposit') 
    win3.minsize(width=400,height=120) 
    e1=IntVar() 
    e2=IntVar() 

def MakeDeposit(): 
    num2 = e2.get() 
    balance = int(num2) 
    num1 = e1.get() 
    depositAmount = int(num1) 
    while depositAmount<=0 or depositAmount%10!=0: 
     errorLabel = Label(win3,text="That was not a valid amount").grid(row=3,columnspan=5) 
     return# 
    textLabel = Label(win3,text=("Your new balance is:\n")).grid(row=3,columnspan=5) 
    newBalanceLabel = Label(win3,text=(balance+depositAmount)).grid(row=4,columnspan=5, pady=7) 

l1=Label(win3,text='Deposit Amount:').grid(row=1,padx=7,pady=5,sticky='we') 
l2=Label(win3,text='Balance:').grid(row=2,padx=7,pady=5,sticky='e') 
b1=Butto(win3,text='Calculate',width=8,height=3,command=MakeDeposit).grid(row=1,column=10,sticky='e'+'w',padx=7,rowspan=2) 
e1=Entry(win3,width=40) 
e1.grid(row=1,column=1,sticky='e'+'w',columnspan=3) 
e2=Entry(win3,width=40) 
e2.grid(row=2,column=1,sticky='e'+'w',columnspan=3) 
logLabel=Label(root,text='DEPOSIT',font='bold',fg='Grey').grid(row=0,padx=5,pady=5) 

root.mainloop() 
+0

코드에 구문 오류가 표시되지 않습니다. –

+0

당신은 여러 곳에서'Tk()'를 호출하고 있습니다. 작동하지 않는다면, 추가 윈도우를 위해'Toplevel()'을 사용할 필요가 있습니다. 함수의 이름과 함수에 의해 생성 된 윈도우의 이름으로'win2'와'win3'을 사용하고 있습니다. 그건 작동하지 않습니다. – jasonharper

+0

'tkinter .__ init__ '의 에러 라인 2256은 내부 BaseWidget 클래스의 private ._setup 메소드에 있습니다. 그것을 해석하기 위해 위에 게시 된 코드가 아닌 원본 코드를 실행할 때 위에서 설명한대로 전체 추적 (코드로 포맷 됨)을 확인해야합니다. –

답변

1

나는 오류 메시지를 설명 할 수는 여기에

는 오류입니다.

Traceback (most recent call last): 
    File "F:\Python\mypy\tem.py", line 84, in <module> 
    l1=Label(win3,text='Deposit Amount:').grid(row=1,padx=7,pady=5,sticky='we') 
    File "C:\Programs\Python36\lib\tkinter\__init__.py", line 2760, in __init__ 
    Widget.__init__(self, master, 'label', cnf, kw) 
    File "C:\Programs\Python36\lib\tkinter\__init__.py", line 2286, in __init__ 
    BaseWidget._setup(self, master, cnf) 
    File "C:\Programs\Python36\lib\tkinter\__init__.py", line 2256, in _setup 
    self.tk = master.tk 
AttributeError: 'function' object has no attribute 'tk' 

어떤 위젯 생성 호출에 대한 첫 번째, 부모 인수가 위젯해야합니다 : 내 로컬 복사본에 서식 오류를 수정 한 후,이를 얻었다. 속으로

l1=Label(win3, ... 

속성이없는 win3 함수를 전달했습니다.

미래에 대해서는 MCVEs을 읽어보십시오.

관련 문제