반응형
최종 목표는 아래 프로그램입니다.

버튼은 전부 추가한 상태입니다. 코드와 실행결과는 아래와 같습니다.
import tkinter as tk
#윈도우 생성
root=tk.Tk()
#전체 이름
root.title('코로나 진단키트 에측도 진단 프로그램')
#창 크기 +붙은 부분은 좌상단 떨어진 위치
root.geometry("600x500+100+100")
#함수들
def make_lab14() :
lab14.configure(text=ent12.get())
def make_lab24() :
lab24.configure(text=ent22.get())
def make_lab34() :
lab34.configure(text=ent32.get())
#1행 라벨 추가
lab11=tk.Label(root,
text="민감도",
width=8,
height=1,
font=('맑은 고딕',16,'bold'),
bg='#2F5597',
fg='white')
lab11.grid(row=0,column=0,padx=5,pady=10)
ent12=tk.Entry(font=('맑은 고딕',16,'bold'),bg='white',width=8)
ent12.grid(row=0,column=1,padx=5,pady=10)
button13 = tk.Button(root,text='\u2192',font=('맑은 고딕',11,'bold'),bg="red",fg='white',width=4,command=make_lab14)
button13.grid(row=0,column=2,padx=5,pady=10)
lab14=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab14.grid(row=0,column=3,padx=5,pady=10)
#2행 라벨 추가
lab21=tk.Label(root,text="특이도",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab21.grid(row=1,column=0,padx=5,pady=10)
ent22=tk.Entry(font=('맑은 고딕',16,'bold'),bg='white',width=8)
ent22.grid(row=1,column=1,padx=5,pady=10)
button23 = tk.Button(root,text='\u2192',font=('맑은 고딕',11,'bold'),bg="red",fg='white',width=4,command=make_lab24)
button23.grid(row=1,column=2,padx=5,pady=10)
lab24=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab24.grid(row=1,column=3,padx=5,pady=10)
#3행 라벨 추가
lab31=tk.Label(root,text="발생률",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab31.grid(row=2,column=0,padx=5,pady=10)
ent32=tk.Entry(font=('맑은 고딕',16,'bold'),bg='white',width=8)
ent32.grid(row=2,column=1,padx=5,pady=10)
button33 = tk.Button(root,text='\u2192',font=('맑은 고딕',11,'bold'),bg="red",fg='white',width=4,command=make_lab34)
button33.grid(row=2,column=2,padx=5,pady=10)
lab34=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab34.grid(row=2,column=3,padx=5,pady=10)
#4행 라벨 추가
button41 = tk.Button(root,text='결과 계산하기(클릭)',font=('맑은 고딕',16,'bold'),bg="red",fg='white')
button41.grid(row=3,column=0,padx=5,pady=10,columnspan=4,sticky='we')
#5행 라벨 추가
lab51=tk.Label(root,text="양성예측도 (양성인데 진짜걸림)",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab51.grid(row=4,column=0,padx=5,pady=10,columnspan=3,sticky='we')
lab52=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='yellow',fg='white')
lab52.grid(row=4,column=3,padx=5,pady=10)
#6행 라벨 추가
lab61=tk.Label(root,text="음성예측도 (음성인데 진짜 안걸림)",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab61.grid(row=5,column=0,padx=5,pady=10,columnspan=3,sticky='we')
lab62=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='yellow',fg='white')
lab62.grid(row=5,column=3,padx=5,pady=10)

이제 양성예측도와 음성예측도를 계산해서 라벨에 출력해주어야 합니다. 첫 시간에 유도한 수식을 가져옵시다.
PPV=(PrevalenceRate)(Sensitivity)(PrevalenceRate)(Sensitivity)+(1−PrevalenceRate)(1−Specificity)
NPV=(1−PrevalenceRate)(Specificity)(1−PrevalenceRate)(Specificity)+(PrevalenceRate)(1−Sensitivity)
발생률,민감도,특이도를 코드에서 받아오면 아래와 같습니다.
발생률 : lab14.cget("text")
특이도 : lab24.cget("text")
민감도 : lab34.cget("text")
PPV와 NPV를 계산해서 노란색 라벨에 추가해주는 함수를 만들어봅시다.
def make_PPV_NPV():
Sen=float(lab14.cget("text"))/100
Spe=float(lab24.cget("text"))/100
P_R=float(lab34.cget("text"))/100
PPV=round((P_R*Sen)/(P_R*Sen+(1-P_R)*(1-Spe))*100,4)
NPV=round(((1-P_R)*Spe)/(P_R*(1-Sen)+(1-P_R)*Spe)*100,4)
lab52.configure(text=PPV)
lab62.configure(text=NPV)
결과 계산하기 버튼을 클릭하면 위 함수가 실행되도록 command 옵션을 설정합니다.

코드를 실행하면 아래와 같습니다. 작동을 잘 합니다.

전체 코드는 아래와 같습니다.
import tkinter as tk
#윈도우 생성
root=tk.Tk()
#전체 이름
root.title('코로나 진단키트 에측도 진단 프로그램')
#창 크기 +붙은 부분은 좌상단 떨어진 위치
root.geometry("600x500+100+100")
#함수들
def make_lab14() :
lab14.configure(text=ent12.get())
def make_lab24() :
lab24.configure(text=ent22.get())
def make_lab34() :
lab34.configure(text=ent32.get())
def make_PPV_NPV():
Sen=float(lab14.cget("text"))/100
Spe=float(lab24.cget("text"))/100
P_R=float(lab34.cget("text"))/100
PPV=round((P_R*Sen)/(P_R*Sen+(1-P_R)*(1-Spe))*100,4)
NPV=round(((1-P_R)*Spe)/(P_R*(1-Sen)+(1-P_R)*Spe)*100,4)
lab52.configure(text=PPV)
lab62.configure(text=NPV)
#1행 라벨 추가
lab11=tk.Label(root,
text="민감도",
width=8,
height=1,
font=('맑은 고딕',16,'bold'),
bg='#2F5597',
fg='white')
lab11.grid(row=0,column=0,padx=5,pady=10)
ent12=tk.Entry(font=('맑은 고딕',16,'bold'),bg='white',width=8)
ent12.grid(row=0,column=1,padx=5,pady=10)
button13 = tk.Button(root,text='\u2192',font=('맑은 고딕',11,'bold'),bg="red",fg='white',width=4,command=make_lab14)
button13.grid(row=0,column=2,padx=5,pady=10)
lab14=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab14.grid(row=0,column=3,padx=5,pady=10)
#2행 라벨 추가
lab21=tk.Label(root,text="특이도",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab21.grid(row=1,column=0,padx=5,pady=10)
ent22=tk.Entry(font=('맑은 고딕',16,'bold'),bg='white',width=8)
ent22.grid(row=1,column=1,padx=5,pady=10)
button23 = tk.Button(root,text='\u2192',font=('맑은 고딕',11,'bold'),bg="red",fg='white',width=4,command=make_lab24)
button23.grid(row=1,column=2,padx=5,pady=10)
lab24=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab24.grid(row=1,column=3,padx=5,pady=10)
#3행 라벨 추가
lab31=tk.Label(root,text="발생률",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab31.grid(row=2,column=0,padx=5,pady=10)
ent32=tk.Entry(font=('맑은 고딕',16,'bold'),bg='white',width=8)
ent32.grid(row=2,column=1,padx=5,pady=10)
button33 = tk.Button(root,text='\u2192',font=('맑은 고딕',11,'bold'),bg="red",fg='white',width=4,command=make_lab34)
button33.grid(row=2,column=2,padx=5,pady=10)
lab34=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab34.grid(row=2,column=3,padx=5,pady=10)
#4행 라벨 추가
button41 = tk.Button(root,text='결과 계산하기(클릭)',font=('맑은 고딕',16,'bold'),bg="red",fg='white',command=make_PPV_NPV)
button41.grid(row=3,column=0,padx=5,pady=10,columnspan=4,sticky='we')
#5행 라벨 추가
lab51=tk.Label(root,text="양성예측도 (양성인데 진짜걸림)",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab51.grid(row=4,column=0,padx=5,pady=10,columnspan=3,sticky='we')
lab52=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='yellow',fg='black')
lab52.grid(row=4,column=3,padx=5,pady=10)
#6행 라벨 추가
lab61=tk.Label(root,text="음성예측도 (음성인데 진짜 안걸림)",width=8,height=1,font=('맑은 고딕',16,'bold'),bg='#2F5597',fg='white')
lab61.grid(row=5,column=0,padx=5,pady=10,columnspan=3,sticky='we')
lab62=tk.Label(root,width=8,height=1,font=('맑은 고딕',16,'bold'),bg='yellow',fg='black')
lab62.grid(row=5,column=3,padx=5,pady=10)
반응형
'파이썬 > tkinter GUI (코로나 양성예측도,음성예측도)' 카테고리의 다른 글
[파이썬 tkinter GUI 만들기] #11. 퍼센트 기호 출력하기 (0) | 2022.02.02 |
---|---|
[파이썬 tkinter GUI 만들기] #10. 코드 정리하고 사이즈 수정하기 (0) | 2022.02.02 |
[파이썬 tkinter GUI 만들기] #8. 나머지 버튼 만들기 (0) | 2022.02.01 |
[파이썬 tkinter GUI 만들기] #7. 세번째 행(row)까지 만들기 (0) | 2022.02.01 |
[파이썬 tkinter GUI 만들기] #6. 버튼 눌러서 값 입력받기 (0) | 2022.02.01 |
댓글
만다린망고님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.