tkinter] 결과 버튼 하나로 여러개 결과값 도출하기

조회수 527회

안녕하세요 여러 참고사이트를 모아모아 코드를 만들었습니다! 하지만 에러가 나는 부분이... 여러개의 항목들을 작성 후 버튼 클릭!을 하면 마지막 항목에만 값이 나옵니다 혹시 모든 행에 결과값이 나오게 하는 방법을 아시나요! 조금 코드가 엉킨 것 같은데 해결하기가 힘드네요 코드의 전문을 올립니다

from tkinter import *
from tkinter import ttk
import csv

class App(ttk.Frame):
    num_rows = 2
    entry_list = []

    def __init__(self, master, *args, **kwargs):
        ttk.Frame.__init__(self, master, *args, **kwargs)
        self.master = master
        self.label_frame = ttk.Frame(self.master)
        self.label_frame.grid()
        self.label_list = []

        label1 = Label(root, width=5, text="No.", font=("Bahnschrift, 9"), fg='black')
        label2 = Label(root, width=12, text="Chip", font=("Bahnschrift, 9"), fg='black')
        label3 = Label(root, width=12, text="Length[mm] : ", font=("Bahnschrift, 9"), fg='black')
        label4 = Label(root, width=12, text="Width[mm] : ", font=("Bahnschrift, 9"), fg='black')
        label5 = Label(root, width=12, text="Height[mm] : ", font=("Bahnschrift, 9"), fg='black')
        label6 = Label(root, width=12, text="Watt[W] : ", font=("Bahnschrift, 9"), fg='black')
        label7 = Label(root, width=12, text="Rjc[C/W] : ", font=("Bahnschrift, 9"), fg='black')
        label8 = Label(root, width=12, text="h[W/㎡K] : ", font=("Bahnschrift, 9"), fg='black')
        label9 = Label(master, width=12, text="Temp[C] : ", font=("Bahnschrift, 9"), fg='red')

        #grid
        label1.grid(row=0, column=0, padx=1, pady=10)
        label2.grid(row=0, column=1, padx=2, pady=10)
        label3.grid(row=0, column=2, padx=2, pady=10)
        label4.grid(row=0, column=3, padx=2, pady=10)
        label5.grid(row=0, column=4, padx=2, pady=10)
        label6.grid(row=0, column=5, padx=2, pady=10)
        label7.grid(row=0, column=6, padx=2, pady=10)
        label8.grid(row=0, column=7, padx=2, pady=10)
        label9.grid(row=0, column=8, padx=2, pady=10)


        ##유동
        self.Number_field = Entry(root, width=5)
        self.Length_field = Entry(root, width=9)
        self.Width_field = Entry(root, width=9)
        self.Height_field = Entry(root, width=9)
        self.Watt_field = Entry(root, width=9)
        self.Rjc_field = Entry(root, width=9)
        self.Temperature_field = Entry(root, width=9)

        self.Number_field.grid(row=1, column=0, padx=1, pady=1)
        self.Length_field.grid(row=1, column=2, padx=1, pady=1)
        self.Width_field.grid(row=1, column=3, padx=1, pady=1)
        self.Height_field.grid(row=1, column=4, padx=1, pady=1)
        self.Watt_field.grid(row=1, column=5, padx=1, pady=1)
        self.Rjc_field.grid(row=1, column=6, padx=1, pady=1)
        self.Temperature_field.grid(row=1, column=8, padx=1, pady=1)

        strs = StringVar()
        strs2 = StringVar()
        combx1 = ttk.Combobox(root, width=9, textvariable=strs)

        combx1['values'] = (' Natural', ' Forced(Fan)')
        combx1.current()
        combx1.grid(column=7, row=1)

        combx2 = ttk.Combobox(root, width=9, textvariable=strs2)
        combx2['values'] = ('CPU', 'eMMC', 'PMIC')
        combx2.grid(column=1, row=1)
        combx2.current()

        # Create a Submit Button and attached

        button1 = Button(root, text="Submit", bg="black", fg="white", command=self.cal_Temp)
        button1.grid(row=100, column=0, pady=10)
        button2 = Button(root, text="Clear", fg="blue", command=self.clear_all)
        button2.grid(row=100, column=1, pady=10)
        button3 = Button(root, text="Add Row (+)",  command=self.add_new)
        button3.grid(row=102, column=0, pady=10)
        button4 = Button(root, text="Delete Row (-)", command=self.delete)
        button4.grid(row=102, column=1, pady=10)
        button5 = Button(root, text="Export", command=self.writeToFile)
        button5.grid(row=103, column=1, pady=10)


    def writeToFile(self):
        with open('Temperature_MJH.csv', 'a') as f:
            w=csv.writer(f, quoting=csv.QUOTE_ALL)

            w.writerow([self.Length_field.get()])
            w.writerow([self.Width_field.get()])
            w.writerow([self.Height_field.get()])
            w.writerow([self.Watt_field.get()])
            w.writerow([self.Rjc_field.get()])
            w.writerow([self.Temperature_field.get()])


    def clear_all(self):
        self.Number_field.delete(0,END)
        self.Length_field.delete(0, END)
        self.Width_field.delete(0, END)
        self.Height_field.delete(0, END)
        self.Watt_field.delete(0, END)
        self.Rjc_field.delete(0, END)
        self.Temperature_field.delete(0, END)



        #이거 지워도 되는지
        self.Length_field.focus_set()

    def cal_Temp(self):
        Length = float(self.Length_field.get())
        Width = float(self.Width_field.get())
        Height = float(self.Height_field.get())
        Watt = float(self.Watt_field.get())
        Rjc = float(self.Rjc_field.get())
        h = 1

        Temperature = float(((Watt * 0.5) / (((Length * Width * 2) + (Length * 2) + (
                    Height * Width * 5)) / 1000)) / h + Rjc )
        self.Temperature_field.insert(10,Temperature)
        print(Temperature)


    def add_new(self):


        self.num_rows += 1


        self.Number_field = Entry(root, width=5)
        self.Length_field = Entry(root, width=9)
        self.Width_field = Entry(root, width=9)
        self.Height_field = Entry(root, width=9)
        self.Watt_field = Entry(root, width=9)
        self.Rjc_field = Entry(root, width=9)
        self.Temperature_field = Entry(root, width=9)

        self.Number_field.grid(row=self.num_rows, column=0, padx=1, pady=1)
        self.Length_field.grid(row=self.num_rows, column=2, padx=1, pady=1)
        self.Width_field.grid(row=self.num_rows, column=3, padx=1, pady=1)
        self.Height_field.grid(row=self.num_rows, column=4, padx=1, pady=1)
        self.Watt_field.grid(row=self.num_rows, column=5, padx=1, pady=1)
        self.Rjc_field.grid(row=self.num_rows, column=6, padx=1, pady=1)
        self.Temperature_field.grid(row=self.num_rows, column=8, padx=1, pady=1)



        strs = StringVar()
        strs2 = StringVar()
        self.combx1 = ttk.Combobox(root, width=9, textvariable=strs)

        self.combx1['values'] = (' Natural', ' Forced(Fan)')
        self.combx1.current()
        self.combx1.grid(row=self.num_rows, column=7)

        self.combx2 = ttk.Combobox(root, width=9, textvariable=strs2)
        self.combx2['values'] = ('CPU', 'eMMC', 'PMIC')
        self.combx2.grid(row=self.num_rows, column=1)
        self.combx2.current()
        self.ics=self.num_rows
        self.Number_field.insert(10, self.ics-1)


    def delete(self):
        self.num_rows -= 1
        self.Number_field.destroy()
        self.Length_field.destroy()
        self.Width_field.destroy()
        self.Height_field.destroy()
        self.Watt_field.destroy()
        self.Rjc_field.destroy()
        self.Temperature_field.destroy()
        self.combx1.destroy()
        self.combx2.destroy()


        self.ics -= 1




if __name__ == "__main__":
    root = Tk()
    root.configure(background='snow')
    root.geometry("1000x450")
    root.title("Expectation of Temp Calculator")
    my_app = App(root)
    root.mainloop()


'''
  • (•́ ✖ •̀)
    알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)