Python과 Tkinter를 사용하여 피트 당 볼륨 계산기를 구축하려고합니다. 이 오류 메시지가 계속 표시됩니다. 나는 그것이 아마도 내가 간과하고있는 단순한 것임을 압니다. 아무도 내가 어디로 잘못 가고 있는지 볼 수 있습니까? 미리 감사드립니다.
이것은 내 코드입니다.
from tkinter import *
root = Tk()
root.title("Volume Calculator")
def volume_per_foot():
gallons_per_foot = inside_diameter * inside_diameter / 1029.4
return (gallons_per_foot)
frame = LabelFrame(root, text="BHA", padx=5, pady=5)
frame.grid(padx=10, pady=10)
component_label = Label(frame, text="Component")
component_label.grid(row=0)
component = Entry(frame)
component.grid(row=1)
component_length = Label(frame, text="Length")
component_length.grid(row=2)
length = Entry(frame)
length.grid(row=3)
component_outside_diameter = Label(frame, text="Outside Diameter")
component_outside_diameter.grid(row=4)
outside_diameter = Entry(frame)
outside_diameter.grid(row=5)
component_inside_diameter = Label(frame, text="Inside Diameter")
component_inside_diameter.grid(row=6)
inside_diameter = Entry(frame)
inside_diameter.grid(row=7)
submit = Button(frame, text="Enter", command=volume_per_foot)
submit.grid(row=8)
gal_per_foot = Label(frame, text="Gallons Per Foot")
gal_per_foot.grid(row=9)
component_volume = Label(frame)
component_volume.grid(row=10)
root.mainloop()
그리고 이것은 오류 메시지입니다.
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/__init__.py", line 1883, in __call__
return self.func(*args)
File "volume.py", line 34, in volume_per_foot
gallons_per_foot = inside_diameter * inside_diameter / 1029.4
TypeError: unsupported operand type(s) for *: 'Entry' and 'Entry'
Tk 객체에서 값을 가져 와서 다음 Entry
과 같은 숫자로 변환해야합니다.
gallons_per_foot = float(inside_diameter.get()) * float(inside_diameter.get()) / 1029.4
버튼 콜백에서 반환 값을 얻을 수 없습니다. 결과를 레이블에 표시하려면 다음을 수행 할 수 있습니다.를 도입 StringVar
하고 레이블에 바인딩하고 단추 콜백에 전달하고 (여기서는 클로저와 람다 함수를 사용하고 있습니다) 계산 후 해당 값을 변경합니다.
def volume_per_foot(result_text):
gallons_per_foot = float(inside_diameter.get()) * float(inside_diameter.get()) / 1029.4
result_text.set(str(gallons_per_foot))
result_text = StringVar()
result_text.set("Gallons Per Foot")
submit = Button(frame, text="Enter", command=lambda *args:volume_per_foot(result_text))
submit.grid(row=8)
gal_per_foot = Label(frame, textvariable=result_text)
gal_per_foot.grid(row=9)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다