알쏭달쏭 공부한거 쓰기
7/7 파이썬 수업-클래스 복습, Gui, time 본문
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 |