파이썬 질문 드립니다ㅠㅠㅠ

파이썬 질문 드립니다ㅠㅠㅠ

QA

파이썬 질문 드립니다ㅠㅠㅠ

본문

왕초보가 구글링 해가면서 최대한 코드를 짰는데 실행을 하고 버튼을 누르면 아래처럼 오류가 뜨고 아무것도 프린트 되지 않습니다ㅜㅜㅜㅜ

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\ㅡㅡㅡ\anaconda3\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
TypeError: ice_add() missing 1 required positional argument: 'm'
 

 

어떤 것이 잘못된 건가요?ㅠㅠㅠㅠㅠㅠㅠㅠㅠ

그리고 더불어 프로그램을 실행했을 때 창 안의 버튼들이 두서없이 너무 띄어져 있는데 이 부분도 한번 봐주시면 감사하겠습니다!!!!

 

import tkinter as tk

price_in_out={'매장':0,'포장':0}
price_ice={'Regular Ice':0,'Full Ice':0,'Less Ice':0}
price_sugar={'100%':0,'70%':0,'30%':0,'0%':0}
price_topping={'타피오카펄':500,'알로에':500,'코코넛':600,'치즈폼':700,'딸기쥬얼리':900}

order_in_out={}
order_ice={}
order_sugar={}
order_topping={}

total_price=0


def in_out_add(m):
    global price_in_out,order_in_out,total_price
    if m not in price_in_out:
        print("입력한 메뉴가 존재하지 않습니다.")
    this_price=price_in_out.get(m)
    total_price+=this_price

    if m in order_in_out:
        order_in_out[m]=order_in_out.get(m)+1
    else:
        order_in_out[m]=1
    print_order()
    print_price()


def ice_add(m):
    global price_ice,order_ice,total_price
    if m not in price_ice:
        print("입력한 메뉴가 존재하지 않습니다.")
    this_price=price_ice.get(m)
    total_price+=this_price

    if m in order_ice:
        order_ice[m]=order_ice.get(m)+1
    else:
        order_ice[m]=1
    print_order()
    print_price()


def sugar_add(m):
    global price_sugar,order_sugar,total_price
    if m not in price_sugar:
        print("입력한 메뉴가 존재하지 않습니다.")
    this_price=price_sugar.get(m)
    total_price+=this_price

    if m in order_sugar:
        order_sugar[m]=order_sugar.get(m)+1
    else:
        order_sugar[m]=1
    print_order()
    print_price()


def topping_add(m):
    global price_topping,order_topping,total_price
    if m not in price_topping:
        print("입력한 메뉴가 존재하지 않습니다.")
    this_price=price_topping.get(m)
    total_price+=this_price

    if m in order_topping:
        order_topping[m]=order_topping.get(m)+1
    else:
        order_topping[m]=1
    print_order()
    print_price()


def print_order():
    global order_in_out, order_ice, order_sugar,order_topping

    tmp=""
    for i in order_in_out:
        tmp=tmp+i+"X"+str(order_in_out.get(i))+"\n"
    for i in order_ice:
        tmp=tmp+i+"X"+str(order_ice.get(i))+"\n"
    for i in order_sugar:
        tmp=tmp+i+"X"+str(order_sugar.get(i))+"\n"
    for i in order_topping:
        tmp=tmp+i+"X"+str(order_topping.get(i))+"\n"

    text_1.delete('1.0',tk.END)
    text_1.insert(tk.INSERT,tmp)

def order_end():
    global total_price, order_in_out, order_ice, order_sugar,order_topping
    total_price=0
    del order_in_out
    del order_ice
    del order_sugar
    del order_topping

    order_in_out={}
    order_ice={}
    order_sugar={}
    order_topping={}
    print_price()
    print_order()
    #show_drink()

def print_price():
    global total_price
    label_price.configure(text=str(total_price)+"원")

##메인 코드 부분
window=tk.Tk()
window.title("추가 주문 사항")
window.geometry("430x600+500+20") 
window.resizable() #False,False

frame1=tk.Frame(window,width="600",height="10")
frame1.pack(fill="both")

frame2=tk.Frame(window,width="600")
frame2.pack(fill="both",expand=True)

frame3=tk.Frame(window,width="600",height="10")
#frame3.pack(fill="both", expand=True)

frame4=tk.Frame(window,width="600",height="10")
frame4.pack(fill="both",expand=True)



btn_end=tk.Button(frame1,text="주문하기",padx="10",pady="10",command=order_end)
btn_end.grid(row=6,column=1,padx=10,pady=10)

label_price=tk.Label(frame1,text="0원",width="20",padx=10 ,pady="10",font='Arial 15')
label_price.grid(row=5,column=1,padx=10,pady=10)

btn_in_out=tk.Button(frame1,text="포장",padx="10",pady="10",command=in_out_add)
btn_in_out.grid(row=0,column=0,padx=10,pady=10)

btn_in_out1=tk.Button(frame1,text="매장",padx="10",pady="10",command=in_out_add)
btn_in_out1.grid(row=0,column=1,padx=10,pady=10)

btn_ice1=tk.Button(frame1,text="Less Ice",padx="10",pady="10",command=ice_add)
btn_ice1.grid(row=1,column=0,padx=10,pady=10)

btn_ice2=tk.Button(frame1,text="Regular Ice",padx="10",pady="10", command=ice_add)
btn_ice2.grid(row=1,column=1,padx=10,pady=10)

btn_ice3=tk.Button(frame1, text="Full Ice",padx="10",pady="10", command=ice_add)
btn_ice3.grid(row=1,column=2,padx=10,pady=10)

btn_sugar1=tk.Button(frame1,text="30%",padx="10",pady="10", command=sugar_add)
btn_ice3.grid(row=2,column=0,padx=10,pady=10)

btn_sugar2=tk.Button(frame1,text="50%",padx="10",pady="10", command=sugar_add)
btn_sugar2.grid(row=2,column=1,padx=10,pady=10)

btn_sugar3=tk.Button(frame1,text="70%",padx="10",pady="10", command=sugar_add)
btn_sugar3.grid(row=2,column=2,padx=10,pady=10)

btn_sugar4=tk.Button(frame1,text="100%",padx="10",pady="10", command=sugar_add)
btn_sugar4.grid(row=2,column=3,padx=10,pady=10)

btn_topping1=tk.Button(frame1,text="타피오카펄",padx="10",pady="10", command=topping_add)
btn_topping1.grid(row=3,column=0,padx=10,pady=10)

btn_topping2=tk.Button(frame1,text="알로에",padx="10",pady="10", command=topping_add)
btn_topping2.grid(row=3,column=1,padx=10,pady=10)

btn_topping3=tk.Button(frame1,text="코코넛",padx="10",pady="10", command=topping_add)
btn_topping3.grid(row=3,column=2,padx=10,pady=10)

btn_topping4=tk.Button(frame1,text="치즈폼",padx="10",pady="10", command=topping_add)
btn_topping4.grid(row=3,column=3,padx=10,pady=10)

btn_topping5=tk.Button(frame1,text="딸기쥬얼리",padx="10",pady="10", command=topping_add)
btn_topping5.grid(row=4,column=0,padx=10,pady=10)

#주문 리스트
text_1=tk.Text(frame4,height="10")
text_1.pack()

window.mainloop()

이 질문에 댓글 쓰기 :

답변 2

lambda 를 사용해야 합니다.

btn_ice1=tk.Button(frame1,text="Less Ice", command=lambda: ice_add(m))

btn_ice1.grid(row=1,column=0,padx=10,pady=10)

 

http://zetcode.com/python/lambda/#:~:text=Python%20lambda%20has%20the%20following%20syntax%3A%20z%20%3D,the%20lambda%20keyword.%20The%20function%20multiplies%20two%20values.

 

https://stackoverflow.com/questions/5767228/why-is-button-parameter-command-executed-when-declared

참고해보세요.

ice_add( m) 여기 파라미터가 안들어가 있네요
btn_ice1=tk.Button(frame1,text="Less Ice",padx="10",pady="10",command=ice_add)
답변을 작성하시기 전에 로그인 해주세요.
전체 208
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT