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

[파이썬 저울 연결] 11. GUI 만들기 #4. 무게로 회사와 제품명 판별

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

어떤 물건을 올렸을 때, 회사와 제품명을 맞추는 코드를 짜고 싶다. 

 

몇 개 물건의 회사명, 제품명, 무게는 아래와 같다. 

 

회사명 제품명 무게
AMOS Glue_Stick 36.97
Monami Name_Pan 7.54
Monami Ball_Pan 5.71

 

먼저 출력 라벨을 짜보자. 지난시간까지 만든 코드는 아래와 같다. 

 

import tkinter as tk

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

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


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

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


lab00=tk.Label(root,text="현재 무게",
font=('Arial 32 bold'),bg='black',fg="red",width=8,height=1)

lab00.grid(row=0,column=0,padx=10)



#######################################
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() 명령어 적용가능

    root.update() 
    lab01.destroy()

 

아래와 같이 라벨을 추가해준다. 

 

 

결과는 아래와 같다. 

 

 

코드에서 라벨을 변경되는 라벨과 고정라벨로 구분해준다. 

 

 

이제 if 문을 이용하여 무게가 특정 범위 내에 들어올 경우 특정 값을 출력하도록 만들어준다. 무게 range는 임의로 정해주었다. 

 

 

변동되는 라벨에서 text와 bg 부분을 변수로 바꿔줍니다. 

 

 

테스트 결과는 아래와 같습니다. 

 

 

<오늘 코드 모아보기>

 

import tkinter as tk
from numpy import product

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

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


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

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


lab00=tk.Label(root,text="현재 무게",
font=('Arial 32 bold'),bg='black',fg="red",width=8,height=1)

lab00.grid(row=0,column=0,padx=10)



#######################################
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)

    #제품 별 무게
    if 36 <= res <=38 :
        company="AMOS"
        product="Glue_Stick"
        mycol="orange"
    elif 7 <= res <= 8 : 
        company="Monami"
        product="Name_Pan"
        mycol="blue"
    elif 5 <= res <= 6 : 
        company="Monami"
        product="Ball_pan"
        mycol="gray"
    else :
        company="NA"
        product="NA"
        mycol="black"

       

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

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

    #Non-Fixed Label
    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() 명령어 적용가능

    lab11=tk.Label(root,text=company,font=('Arial 32 bold'),bg='white',fg=mycol,width=8)
    lab11.grid(row=1,column=1,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=1,padx=10,pady=10)

    root.update() 

    lab01.destroy()
    
root.mainloop()
반응형

댓글