본문 바로가기
GUI 프로젝트/저울 연결하기 (시리얼통신) (Tkinter)

[파이썬 저울 연결] 17. GUI 만들기 #9. 무게 겹칠 경우 다중출력

by 만다린망고 2022. 1. 14.
반응형

무게가 겹칠 경우 결과가 다중출력 되야 한다. 얼마나 겹칠지 모르기 때문에 겹치는 만큼 결과가 출력되야 한다. 

회사와 제품명을 출력하는 라벨을 if문 안에 넣어주었다. 만약 사전 정의한 범위 안으로 현재 무게가 들어올 경우 라벨이 생성되도록 했다. 다중출력을 하기 위해 col을 변수로 줬다. j라는 변수로 입력하고, if문이 참일 경우 j가 1씩 늘어난다. 열이 늘어난다는 의미이다.

import tkinter as tk
from numpy import product

#윈도우 생성
root=tk.Tk()

#전체 이름
root.title('무게를 이용한 검수')


#창 크기 +붙은 부분은 좌상단 떨어진 위치
root.geometry("1000x400+100+100")

#창 크기 조절 가능 여부 (디폴트 True)
root.resizable(True,True)

#Fixed Label
lab00=tk.Label(root,text="현재 무게",font=('Arial 32 bold'),bg='black',fg="white",width=8,height=1)
lab00.grid(row=0,column=0,padx=10)

lab10=tk.Label(root,text="회사",font=('Arial 32 bold'),bg='black',fg="white",width=8)
lab10.grid(row=1,column=0,padx=10,pady=20)

lab20=tk.Label(root,text="제품명",font=('Arial 32 bold'),bg='black',fg="white",width=8)
lab20.grid(row=2,column=0,padx=10,pady=20)



#시리얼 데이터 받아오기
import serial
import re

ser = serial.Serial(port='COM8', baudrate=9600, bytesize=serial.EIGHTBITS,
                    parity=serial.PARITY_NONE, timeout=None)

#결과출력
while(True):
    ser.close()
    ser.open()
    #값 불러오기
    res=ser.readline()
    #문자열로 변환
    res=str(res)
    #숫자 부분 추출, 추출 결과는 ['숫자'] 형태
    res=re.findall("\d+.\d+",res)
    #문자열 추출

    if len(res)==0 :
        res="set0"
    else :
        res=res[0]
        #실수로 변환
        res=float(res)

    #현재무게
    lab01=tk.Label(root,text=res,font=('Arial 32 bold'),bg="white",fg="black",width=8)
    lab01.grid(row=0,column=1,padx=10,pady=20) #이렇게 .grid 따로 입력 해야 .destroy() 명령어 적용가능

    #제품 별 무게
    import pandas as pd
    df1=pd.read_csv("경로/ex_weight.csv",encoding='CP949')

    company =''
    product =''
    mycol='black'

    j=1

    for i in list(df1.index) :
        if df1.loc[i,"최소"] <= res <= df1.loc[i,"최대"] :
            company=df1.loc[i,"회사"]
            product=df1.loc[i,"제품"]
            mycol='red'

            #non-fixed label
            lab11=tk.Label(root,text=company,font=('Arial 32 bold'),bg='white',fg=mycol,width=8)
            lab11.grid(row=1,column=j,padx=10,pady=20)

            lab21=tk.Label(root,text=product,font=('Arial 32 bold'),bg='white',fg=mycol,width=12)
            lab21.grid(row=2,column=j,padx=10,pady=10)
            
            j=j+1

    root.update() 
    lab01.destroy()


root.mainloop()

 

다중 출력은 된다. 

 

 

그런데 문제가 있다. 라벨이 한번 생기고 나서 사라지지를 않는다. 

 

 

사라지게 안했으니 그렇다. 

 

그래서 무작정 아래와 같이 추가했는데 오류가 난다. 

 

 

해당 무게가 없는 경우 라벨이 생성되지 않는데도 제거 명령이 입력되기 때문이다. 해결은 다음시간에. 

반응형

댓글