import time
import tkinter.ttk as tk
import tkinter.messagebox as msbx
from tkinter import *
root = Tk()
root.title("고시원 예약")
root.geometry("540x800+300+100") # 가로 x 세로 + x좌표 + y좌표 (창 크기, xy좌표 지정하지 않으면 가변되게 나타남)
root.resizable(False, True) # x(너비), y(높이) 조절 가능 여부
# 버튼 기본
btn1 = Button(root, text="버튼1")
btn1.pack()
# 버튼 (너비와 높이 조절 (가변크기))
btn2 = Button(root, padx=10, pady=3, text="버튼222222222222")
btn2.pack()
# 버튼 (너비와 높이 조절 (고정크기))
btn3 = Button(root, width=20, height=1, text="버튼3333333333333333333333333333")
btn3.pack()
# 버튼 (색상)
btn4 = Button(root, fg="red", bg="yellow", text="버튼4")
btn4.pack()
# 이미지 버튼
photo = PhotoImage(file="sample.png")
btn5 = Button(root, image=photo)
btn5.pack()
toggle = True
text1 = ""
entry1 = ""
# Click event
def btncmd():
print("버튼이 클릭")
global toggle # 전역변수임을 표현해야 루틴이 끝나도 toggle 변수는 사라지지 않는다. (가베지 콜렉션)
global text1
global entry1
if toggle:
text1 = txt1.get("1.0", END) # txt1(텍스트)의 라인1 번째, 컬럼 0에서 끝까지의 텍스트를 갖고 온다.
entry1 = e.get() # entry의 값 갖기
txt1.delete("1.0", END) # text 값 삭제
e.delete(0, END) # entry 값 삭제
lbl1.config(text="또 만나요")
lstbox1.delete(END) # END리스트의 맨 끝 부터 삭제, 0은 처음부터 삭제
# 리스트 박스 항목 개수
print("리스트에는 {0} 개의 항목이 있습니다.".format(lstbox1.size()))
# 리스트 박스의 값을 갖고 온다. 0번째부터 끝까지
print("리스트 전체 내용은 {0} 입니다.".format(lstbox1.get(0, END)))
toggle = False
else:
lbl1.config(text="안녕하세요.")
print(text1)
print(entry1)
toggle = True
def lstSelection():
# 선택된 항목 (인덱스값으로 반환)
print("리스트에서 선택한 항목은 {0} 입니다.".format(lstbox1.curselection()))
print("체크 박스 상태 : {0}".format(chkVar.get()))
if chkVar.get()==0: #체크 박스 토글
chkVar.set(1)
else:
chkVar.set(0)
print("선택한 메뉴는 {0} ".format(rdoVar.get()))
print("선택한 일은 {0} ".format(cmb1.get())) # 인덱스가 아닌 값으로 반환
prsbar1.stop() # 프로그래스바를 멈추게 한다.
for i in range(1, 101): # 1 ~ 100
time.sleep(0.01) # 0.01초 대기
p_var2.set(i) # 프로그래스바에 값 설정
prsbar2.update() # ui 업데이트 (이것을 하지 않으면 제대로 동작하지 않는다.)
print(p_var2.get())
btn6 = Button(root, text="클릭 이벤트 버튼", command=btncmd)
btn6.pack()
btn7 = Button(root, text="리스트 이벤트 버튼", command=lstSelection)
btn7.pack()
#-----------------------------------------------------------------
# Label
lbl1 = Label(root, text="안녕하세요")
lbl1.pack()
lbl2 = Label(root, image=photo)
lbl2.pack()
#-----------------------------------------------------------------
# text (메모장), entry(한줄 입력)
txt1 = Text(root, width=50, height=3)
txt1.insert(END, "여러 줄 글자를 입력하세요.")
txt1.pack()
e = Entry(root, width=30)
e.insert(0, "한줄만 입력")
e.pack()
#-----------------------------------------------------------------
# listbox, scrollbar
# extended는 다중 선택 가능, single은 하나만 선택, height의 0은 리스트 값을 모두 보여주는 높이
Frame1 = Frame(root)
Frame1.pack()
scroll1 = Scrollbar(Frame1)
scroll1.pack(side="right", fill="y")
lstbox1 = Listbox(Frame1, selectmode="extended", height=3, yscrollcommand=scroll1.set)
lstbox1.insert(0, "사과")
lstbox1.insert(1, "바나나")
lstbox1.insert(2, "딸기")
lstbox1.insert(3, "토마토")
lstbox1.insert(4, "배")
lstbox1.insert(5, "옥수수")
lstbox1.insert(END, "호도") # END 를 쓰면 무조건 맨 끝에 넣는다.
lstbox1.pack(side="left")
scroll1.config(command=lstbox1.yview)
#-----------------------------------------------------------------
# checkbox
chkVar = IntVar() # chkVar에 int형으로 값 저장 한다는 의미
chk1 = Checkbutton(root, text="오늘 하루 이창을 보지 않겠습니다.", variable=chkVar)
chk1.select() # 자동 선택 deselect() 는 반대
chk1.pack()
#-----------------------------------------------------------------
# radiobox
Label(root, text="메뉴를 선택해 주세요").pack()
rdoVar = IntVar() # rdoVar에 int형으로 값 저장 한다는 의미
rdo1 = Radiobutton(root, text="햄버거", value=1, variable=rdoVar)
rdo1.select()
rdo2 = Radiobutton(root, text="치킨", value=2, variable=rdoVar)
rdo3 = Radiobutton(root, text="피자", value=3, variable=rdoVar)
rdo1.pack()
rdo2.pack()
rdo3.pack()
#-----------------------------------------------------------------
# combobox
values = [str(i) + "일" for i in range(1, 32)] # 1 ~ 31까지의 숫자
cmb1 = tk.Combobox(root, height=5, values=values, state="readonly")
# cmb1.set("카드 결제일")
cmb1.current(0)
cmb1.pack()
#-----------------------------------------------------------------
# Progressbar
# indeterminate는 결정되지 않은 작업의 경우
# determinate는 채워지게 보여주는 경우
prsbar1 = tk.Progressbar(root, maximum=100, mode="determinate")
prsbar1.start(10) # 10ms 마다 움직인다.
prsbar1.pack()
p_var2 = DoubleVar()
prsbar2 = tk.Progressbar(root, maximum=100, length=150, variable=p_var2)
prsbar2.pack()
#-----------------------------------------------------------------
# Menubar
def create_new_file():
print("새 파일을 만듭니다.")
menu1 = Menu(root)
# Sub Menu
menu_file = Menu(menu1, tearoff=0)
menu_file.add_command(label="New File", command=create_new_file)
menu_file.add_command(label="New Window")
menu_file.add_separator() # 구분자
menu_file.add_command(label="Open file")
menu_file.add_separator() # 구분자
menu_file.add_command(label="Save All", state="disable")
menu_file.add_separator() # 구분자
menu_file.add_command(label="Exit", command=root.quit)
menu1.add_cascade(label="File", menu=menu_file) # Main Menu1
menu1.add_cascade(label="Edit") # Main Menu2
# Language 메뉴 추가 (라디오버튼을 통해서 선택 가능)
menu_lang = Menu(menu1, tearoff=0)
menu_lang.add_radiobutton(label="Python")
menu_lang.add_radiobutton(label="Java")
menu_lang.add_radiobutton(label="C++")
menu1.add_cascade(label="Language", menu=menu_lang)
menu_chk = Menu(menu1, tearoff=0)
menu_chk.add_checkbutton(label="Show Form1")
menu_chk.add_checkbutton(label="Show Form2")
menu_chk.add_checkbutton(label="Show Form3")
menu1.add_cascade(label="Show Form", menu=menu_chk)
root.config(menu=menu1)
#-----------------------------------------------------------------
# MessageBox
def popmsg():
# msbx.showinfo("알림", "정상적으로 예매 완료")
# msbx.showwarning("경고", "경고 메세지")
# msbx.showerror("오류", "오류 메세지")
# msbx.askokcancel("선택", "오케이 캔슬?")
response = msbx.askokcancel("선택", "오케이 캔슬?")
print("응답 : {0}".format(response))
if response == 1:
print("오케이")
else:
print("캔슬")
Button(root, command=popmsg, text="알림").pack()
#-----------------------------------------------------------------
# Frame
# side : 화면 정렬
frame1 = Frame(root, relief="solid", bd=1) # bd는 선 굵기
frame1.pack(side="left", fill="both", expand=True)
Button(frame1, text="햄버거").pack()
lbl_frame1 = LabelFrame(root, text="음료수")
Button(lbl_frame1, text="커피").pack()
Button(lbl_frame1, text="콜라").pack()
lbl_frame1.pack(side="right", fill="both", expand=True)
#-----------------------------------------------------------------
# Zip
# 합쳐주는 역활
kor = ["가", "나", "다", "라"]
eng = ["A", "B", "C", "D"]
print(list(zip(kor, eng)))
# 반대로 unzip 은 섞여 있는 리스트를 분리해 준다. (*을 쓰면 된다)
mixstr = [("가", "A"), ("나", "B"), ("다", "C"), ("라", "D")]
print(list(zip(*mixstr)))
# 결과값 : [("가", "나", "다", "라"), ("A", "B", "C", "D")]
kor, eng = zip(*mixstr) # 이렇게 쓰면 각각의 변수에 값이 셋팅된다.
root.mainloop()
'프로그램 > 파이썬(Python)' 카테고리의 다른 글
디장고 환경 설정 (Setting Django environment) (0) | 2021.01.14 |
---|---|
여러 사진 합치기 파이썬 소스 연습용 (Multiple photo combinations Python source) (1) | 2021.01.14 |
Hello Python 파이썬 기본 명령어 소스 (Hello python) (0) | 2021.01.14 |
파이썬(Python) 시작하기 (0) | 2021.01.14 |
웹브라우저에서 파이썬 테스트 하기 (0) | 2021.01.14 |