알쏭달쏭 공부한거 쓰기

7/7 파이썬 수업-클래스 복습, Gui, time 본문

파이썬 -23여름학기(ㄱㅎㅈ)

7/7 파이썬 수업-클래스 복습, Gui, time

elec_cy 2023. 7. 7. 16:31

python_day11.pdf
1.66MB
time test 1.py
0.00MB
aa새로운 1.py
0.00MB
button event.py
0.00MB
day11.py
0.00MB

 

 

 

 

 

## * 아래 문장을 완성하시오.
module1에 mydic이 존재

(1) 모듈 'module1'을 포함시키는 문장
```
_import___________ module1
```

(2) 모듈에 별칭을 붙이는 문장
```
import module1 __as___ m1
```

(3) 'module1'에서 mydic만 가져오는 문장
```
from____________ module1 ____import________ mydic
```
사용시 mydic 만 이용 가능

1) 클래스 복습

#gt(>)lt(<) 두개 중에 하나만 구현되도 작동한다.
#gt가 참이라고 lt이 거짓 무조건 상보적이진 않다.> 같이 같은 경우 둘다 false가 나옴
#gt,lt를 구현해 놓으면 sorted도 이 기준으로 작동한다.  문자열로 반환을 시키면 sotred가 작동을 안 하므로 반드시 true false로 반환할 수 있게 만들어야 한다.

 

2)GUI만들기

#tkinter모듈 GUI 개발에 도움을 주는 모듈>for tkinter import* 불러야한다.

#button enrty lable 이 세가지 본다.

from tkinter import* #이름 안 부르고 그냥 사용할 수 있다.
def first_gui():
    window=Tk() #창 (window)생성->tkinter모듈import!! #창생성해서 이름 줌window
    #tkinter모듈에 버튼 클래스가 있겠지 
    btn=Button(window,text='헬로 파이썬')#Button(어디에 붙일건가?,버튼에 표시될 글자 text)
    #실제로 위치시켜야한다.일단 생성만 함
    btn.pack()#버튼 위치 시킴: 버튼을 윈도우에 붙인다.
    #pack():레이아웃 매니저, 배치를 도와주는 메소드:grid()도 있음. 격자 형태~~
    window.mainloop() # 윈도우가 보인다~~

버튼3개 만들기

#버튼 3개 만들어보기    
def btns():
    window=Tk() 
    btn1=Button(window,text='자동차 1')
    btn1.pack()
    btn2=Button(window,text='버튼 2')
    btn2.pack()
    btn3=Button(window,text='버튼 3')
    btn3.pack()
    #기본적으로 위에서 부터 아래로 차례대로 붙인다.
    window.mainloop()

버튼 왼쪽에 붙이기

def btns1():
    window=Tk() 
    btn1=Button(window,text='자동차 1')
    btn1.pack(side=LEFT)
    btn2=Button(window,text='버튼 2')
    btn2.pack(side=LEFT)
    btn3=Button(window,text='버튼 3')
    btn3.pack(side=LEFT)
    window.mainloop()

pack은 side를 선택할 수 있다.

격자 형태 이용하기

#격자 형태로 버튼 4개 만들어보자    
def four_btns():
    window=Tk() 
    btn1=Button(window,text='자동차1')
    btn2=Button(window,text='자동차2')
    btn3=Button(window,text='자동차3')
    btn4=Button(window,text='자동차4')
    #격자형태로 배치할 예정
    btn1.grid(row=0,column=0)
    btn2.grid(row=0,column=1)
    btn3.grid(row=1,column=0)
    btn4.grid(row=1,column=1)
    window.mainloop()

라벨 만들어보자

#Label>버튼이 아니라 사진 글자, 표현하는 기능
#보통 안바뀌는 것과 바뀌는 것 두가지가 있는데 안 바뀌는 건 이름을 안 줘도 된다.
#Lable1(window,text='레이블1',bg='백그라운드 색상',fg='글자색')
#글자나 숫자를 입력받을 수 있는 entry(width=버튼이나 라벨도 너비 가능)>보통 이름을 붙여준다.

def three_Label():
    window=Tk()
    Label(window,text='레이블1',bg='white',fg='yellow').pack()
    Label(window,text='레이블1',bg='red',fg='yellow').pack()
    Label(window,text='레이블1',bg='cyan',fg='yellow').pack()
    ent1=Entry(window,width=20)
    ent1.pack()
    window.mainloop()

속성을 얻어내는 방법,속성을 수정하는 메소드

#속성을 얻어내는 방법-cget()
    if lab.cget('bg')=='yellow':
        lab.config(text='안녕 파이썬', bg='cyan')
    else:
        #그게 아니라 파란 바탕이라면
        lab.config(text='헬로 파이썬',bg='yellow')

버튼 누럴서 이벤트 처리하기(콜백함수)

from tkinter import*
def clicked(): #버튼이 클릭되면 호출할 함수:콜백 함수(이벤트 발생 시 호출되는 함수)
    #만약 헬로파이썬이라고 작성되어 있었다면
    if lab.cget('text')=='헬로 파이썬':
        lab.config(text='안녕 파이썬', bg='cyan')
    else:
        #그게 아니라
        lab.config(text='헬로 파이썬',bg='yellow')
   
    #lab이 전역변수라서 어느 함수에서 사용가능
    # 위젯의 속성을 변경할 때는 config() 메소드를 이용한다.
    #사용법은 생성자에서 속성 지정하는 것과 동일
def chang():    
    window=Tk()
    window.title('안녕 파이썬')
    window.geometry('300x200') #영어 x사용
    lab=Label(window, text='헬로 파이썬',bg='yellow')
    btn=Button(window, text='클릭하면 문자가 변경됨',fg='blue',command=clicked)
    #하나의 컨테이너에 pack과 grid로 변경할 수 없다 둘중 하나만 쭉 사용 , 혼용 불가
    #pack 안 하면 안 뜸
    lab.pack()
    btn.pack()
    window.mainloop()#무한 반복을 하면서 윈도우에서 이벤트가 발생하는지 확인을 하는것 
    #클릭이라는 이벤트는 발생했지만 처리할 함수가 없어서 아무 일도 일어나지 않는다.

#함수는 만들어줬지만 버튼과 연결하지 않았기에 아무일도 일어나지 않는다.>>command=clicked  콜백함수를 연결하는 방법은 command=콜백함수명  _main함수가 콜백함수를 호출한다.


#윈도의 속성변경 window.title('안녕 파이썬')
#윈도우 창 크기 변경 window.geometry('300*200')

 

#entry에서 값얻어오기->#속성을 get하는게 아니라 입력을 그냥 바로 get하는 것라서 get() 이용
#이름 나이 입력 받아서 완료버튼 결과 출력

def entry_test():
    window=Tk()
    la1=Label(window, text='이름:')
    la2=Label(window, text='나이:')
    input_name=Entry(window,width=30)
    input_age=Entry(window,width=30)

    def clicked():
        rslt.config(text=f'{input_name.get()}님의 10년 후 {int(input_age.get())+10}세입니다.')
        input_name.delete(0,END)
        input_age.delete(0,END)  
        #속성을 get하는게 아니라 입력을 그냥 바로 get하는 것라서 get() 이용
        
        #entry에 글자를 입력하고 싶으면
        input_name.insert(0,'이름을 입력하세요')
        input_age.insert(0,'나이을 입력하세요')
    la1.grid(row=0,column=0)
    input_name.grid(row=0,column=1)
    la2.grid(row=1,column=0)
    input_age.grid(row=1,column=1)

    bnt1=Button(window, text='완료',bg='blue',fg='white',width=30,command=clicked)
    bnt1.grid(row=2,column=0,columnspan=2,sticky=E+N+S+W)
    #길이를 늘리는 방법 sticky='E+W+N+S' 버튼에 넣으면 안되고 그리드 할 때 넣어야한다 문자열이 아니라 상수다.
    #두칸을 다 먹고 싶다. span하면 된다. 열 2칸 이니까 columnspan=2/rowspan행 합치기
    #(row=2,column=0,columnspan=2,sticky=E+N+S+W)- row, col 두개 시작 위치, span늘릴 방향과 크기

    rslt=Label(window, text='')
    rslt.grid(row=3,column=0,columnspan=2)
    #rslt=Label(window, text='').grid(row=3,column=0,columnspan=2) 이거는 Lable을 반환한게 아니라 grid한 것을 반환함. grid는 none을 반환함으로 none에다 콜백함수 적용한것
    #정보 입력시 ! 받아들일 수 있게 콜백함수를 만들자!

    window.mainloop()

(1) get()

(2)길이를 늘리는 방법 sticky='E+W+N+S' 버튼에 넣으면 안되고 그리드 할 때 넣어야한다 문자열이 아니라 상수다.

(3)span

(4)rslt=Label(window,text='').grid() 와 rslt=Label(window,text='') ; rslt.grid()의 차이

(5) mainloop의 역할

 

 

BMI계산하기

def clicked():
    rslt.config(text=f'당신의 체질량 지수(BMI)는: {float(ent1.get())/((float(ent2.get())/100)**2):.2f}')
    #BMI= 몸무게/키**2(m^2)
    
window=Tk()
Label(text='체중(kg)과 키(cm)를 차례로 입력하세요').pack()
ent1=Entry(window,width=40)#체중
ent1.pack()
ent2=Entry(window,width=40)#몸무게
ent2.pack()

bnt1=Button(window, text='BMI 계산',command=clicked)
bnt1.pack()

rslt=Label(window, text='')
rslt.pack()

window.mainloop()

 

question

1)명령어 함수에 넣으면 콜 함수 부를때 오류 나는거 맞는지 -함수안에 함수 넣으면 해결 ㅇ
2)pack에는 sticky=동서남북이 안되는지 x

3)Q: 근데 

    n=zip(name,scores)
    m,s=zip(*n)#애는 튜플을 리스트로 묶어서 반환하고 각각으로 튜플을 반환함
    print(m,s)
    names2,scores2=[list(i) for i in zip(*n)] 
    >zip이 한번만 이용하면 없애는 애

 

 

 

time 모듈

 

import time
def thread_test():
    for x in range(1,11):
        print(x)
        time.sleep(1)
        #출력이 (초)만큼 쉬고 실행된다.
thread_test()

sleep메소드의 역할

'파이썬 -23여름학기(ㄱㅎㅈ)' 카테고리의 다른 글

HW8 정리  (0) 2023.07.09
2023 여름 파이썬 중간 족보  (0) 2023.07.09
7/5일 복습-7/7일 진행  (0) 2023.07.07
23 파이썬 기말 족보  (0) 2023.07.06
22 파이썬 기말 족보  (0) 2023.07.06