# TODO : step 1
import tkinter as tk
# TK 객체 생성. (기본 윈도우 객체)
window = tk.Tk()
# 레이블, 입력박스, 라디오버튼, 버튼 등의 기능 또는 객체를 클래스로 만들어 놔서 아래 처럼 바로 사용 할 수 있다.
# 출력될 문자열을 text속성으로 지정하고, 레이블 루트를 생성해준다.
# 뷰 위젯의 하나인 레이블 객체 생성.
label = tk.Label(window, text='hello world')
# .pack()의 함수를 사용해서 기본 윈도우 창에 객체를 붙여준다.
# 위젯(레이블, 버튼)을 윈도우에 붙임.
label.pack()
# UI 쓰레드를 실행해서 화면에 출력.
# 화면을 계속 유지 하는 함수 mainloop().
window.mainloop()
# TODO : step 2
import tkinter as tk
# 버튼이 실행될 함수
def f1():
print("버튼 클릭됨")
# TK 객체 생성. (기본 윈도우 객체)
window = tk.Tk()
# 레이블, 입력박스, 라디오버튼, 버튼 등의 기능 또는 객체를 클래스로 만들어 놔서 아래 처럼 바로 사용 할 수 있다.
# 출력될 문자열을 text속성으로 지정하고, 레이블 루트를 생성해준다.
# 뷰 위젯의 하나인 레이블 객체 생성.
label = tk.Label(window, text='hello world')
# 버튼 객체 생성. 후, 아래 팩에 붙여줌. command 는 함수 또는 어떤 기능을 실행 하고자 할때 사용한다.
btn1 = tk.Button(window, text='button', command=f1)
# .pack()의 함수를 사용해서 기본 윈도우 창에 객체를 붙여준다.
# 위젯(레이블, 버튼 등등...)을 윈도우에 붙임.
label.pack()
btn1.pack()
# UI 쓰레드를 실행해서 화면에 출력.
window.mainloop()
# TODO : step 3
import tkinter as tk
# 버튼이 실행될 함수
# 버튼이 눌림에 따라 안의 내용이 변경되는 함수 (cget함수 사용)
def f1():
# cget(옵션명) : 위젯의 옵션 값을 반환 하는 메서드
# 만일 키 이름'text'의 value인 문자열이 hello이면,
if label.cget('text') == 'hello':
# config를 사용해서 레이블의 속성을 변경 시켜준다.
# config(옵션명 = 값) : 위젯의 설정을 변경하는 메서드
# text에 'world'라는 문자열을 배치한다.
label.config(text='world')
# 아닐경우
else:
# text에 'hello'라는 문자열을 배치한다.
label.config(text='hello')
# TK 객체 생성. (기본 윈도우 객체)
window = tk.Tk()
# 레이블, 입력박스, 라디오버튼, 버튼 등의 기능 또는 객체를 클래스로 만들어 놔서 아래 처럼 바로 사용 할 수 있다.
# 출력될 문자열을 text속성으로 지정하고, 레이블 루트를 생성해준다. 여기서 특이한 점은 width와 height의 비율이 2:1 이라는 점이 흥미롭다.
# 뷰 위젯의 하나인 레이블 객체 생성.
label = tk.Label(window, text='hello', width='10', height='5')
# 버튼 객체 생성. 후, 아래 팩에 붙여줌.
# 가로새로 설정까지 가능.
# 버튼의 command속성은 버튼이 클릭 될때 호출될 핸들러 등록 속성이다.
btn1 = tk.Button(window, text='button', command=f1, width='10', height='5')
# .pack()의 함수를 사용해서 기본 윈도우 창에 객체를 붙여준다.
# 위젯(레이블, 버튼 등등...)을 윈도우에 붙임.
label.pack()
btn1.pack()
# UI 쓰레드를 실행해서 화면에 출력.
window.mainloop()
# TODO : step 4
import tkinter as tk
root = tk.Tk()
# 윈도우에 제목을 설정 할 수 있다.
root.title('제목줄')
# 윈도우창의 위치를 설정 할 수 있다.
# 윈도우 창의 크기 300 , 200 와 위치 100, 100 지정.
# 여기에서 100, 100은 이 코드가 실행 됬을때 윈도우 창을 화면에서 어디 지점에 띄워줄건지 설정하는 부분이다.
root.geometry('300x200+100+100')
# 가로, 세로 길이 조정 불가
# root.resizable(가로, 세로)
root.resizable(False, False)
# 버튼 설정 및 구현
# 윈도우에 추가, 사이드 속성으로 위치를 지정 할 수 있다.
b1 = tk.Button(root, width=10, text='left')
b1.pack(side='left')
b2 = tk.Button(root, width=10, text='right')
b2.pack(side='right')
b3 = tk.Button(root, width=10, text='top')
b3.pack(side='top')
b4 = tk.Button(root, width=10, text='bottom')
b4.pack(side='bottom')
root.mainloop()
# TODO : step 5
import tkinter as tk
root = tk.Tk()
# 윈도우에 제목을 설정 할 수 있다.
root.title('제목줄')
# 윈도우창의 위치를 설정 할 수 있다.
# 윈도우 창의 크기 300 , 200 와 위치 100, 100 지정.
root.geometry('300x200+100+100')
# 가로, 세로 길이 조정 불가
# root.resizable(가로, 세로)
root.resizable(False, False)
# 버튼 설정 및 구현
# 윈도우에 추가, 사이드 속성으로 위치를 지정 할 수 있다.
# 이번엔 grid를 사용해서 순차적으로 행과 열을 지정해서 설정해줄수 있다.
b1 = tk.Button(root, width=10, text='1')
b1.grid(row=0, column=0)
b2 = tk.Button(root, width=10, text='2')
b2.grid(row=0, column=1)
b3 = tk.Button(root, width=10, text='3')
b3.grid(row=0, column=2)
b4 = tk.Button(root, width=10, text='4')
b4.grid(row=1, column=0)
b5 = tk.Button(root, width=10, text='5')
b5.grid(row=1, column=1)
b6 = tk.Button(root, width=10, text='6')
b6.grid(row=1, column=2)
root.mainloop()
# TODO : step 6
import tkinter as tk
root = tk.Tk()
# 윈도우에 제목을 설정 할 수 있다.
root.title('제목줄')
# 윈도우창의 위치를 설정 할 수 있다.
# 윈도우 창의 크기 300 , 200 와 위치 100, 100 지정.
root.geometry('300x200+100+100')
# 가로, 세로 길이 조정 불가
# root.resizable(가로, 세로)
root.resizable(False, False)
# 버튼 설정 및 구현
# 윈도우에 추가, 사이드 속성으로 위치를 지정 할 수 있다.
# 이번엔 grid를 사용해서
b1 = tk.Button(root, width=10, text='1')
b1.grid(row=0, column=0)
b2 = tk.Button(root, width=10, text='2')
b2.grid(row=0, column=1)
b3 = tk.Button(root, width=10, text='3')
b3.grid(row=0, column=2)
b4 = tk.Button(root, width=10, text='4')
b4.grid(row=1, column=0)
b5 = tk.Button(root, width=10, text='5')
b5.grid(row=1, column=1)
b6 = tk.Button(root, width=10, text='6')
b6.grid(row=1, column=2)
# place를 사용해서 x y좌표를 지정 할 수 있다.
b7 = tk.Button(root, width=10, text='7')
b7.place(x=145, y=120)
root.mainloop()
# TODO : step 7
import tkinter as tk
# 입력값 반환하는 함수
def f1():
# 엔트리의 입력값 반
# 엔트리에입력된 정보를 가져와 변수 s에 저장한다
s = entry.get()
# 레이블에 configure 함수에 text 형태를 갖고있는 변수에 s를 대치 시켜준다.
label.config(text=s)
# 엔트리의 모든 값 삭제 entry.delete(어디서 부터, 어디 까지)
# 이후 엔트리에 0번째 자리수 부터 마지막까지 삭제시켜 공백칸을 만들어준다.
entry.delete(0, tk.END)
root = tk.Tk()
# 윈도우에 제목을 설정 할 수 있다.
root.title('제목줄')
# 윈도우창의 위치를 설정 할 수 있다.
# 윈도우 창의 크기 300 , 200 와 위치 300, 300 지정.
root.geometry('300x200+300+300')
# 가로, 세로 길이 조정 불가
# root.resizable(가로, 세로)
root.resizable(False, False)
label = tk.Label(root, width=10)
# entry 는 사용자에게 입력을 받을수 있는 공간을 제공해주는 함수이다. 높이는 선언하지 못한다. 엔트리 클래스 첨부사진 확인.
entry = tk.Entry(root, width=10)
# command 에 기능으로 f1을 넣어준다.
b1 = tk.Button(root, text='write', command=f1)
label.grid(row=0, column=0)
entry.grid(row=1, column=0)
b1.grid(row=1, column=1)
root.mainloop()
# TODO : step 8
import tkinter as tk
# 첫 번쨰 파라메터는 발생한 이벤트 객체를 말한다.
def f1(e):
print('마우스 왼쪽버튼 클릭')
print(e.x, e.y)
def f2(e):
print('마우스 오른쪽버튼 클릭')
print(e.x, e.y)
def f3(e):
print('엔트리에 마우스를 올림')
def f4(e):
print('키보드 엔터 누름')
root = tk.Tk()
b = tk.Button(root, text='btn', width=30)
e = tk.Entry(root, width=30)
b.pack()
e.pack()
# bind 함수로 이벤트를 호출한다
# b.bind('이벤트 종류', f1)
# <Button-1> 왼쪽, <Button-2> 오른쪽, <Button-3> 가운데 마우스 버튼 이벤트이다.
b.bind('<Button-1>', f1)
b.bind('<Button-2>', f2)
e.bind('<Enter>', f3)
e.bind('<Return>', f4)
root.mainloop()
# TODO : step 9 계산기 만들기.
import tkinter as tk
class Calc:
def __init__(self, root):
self.root = root
self.uiInit()
def uiInit(self):
self.root.title('계산기')
self.entry = tk.Entry(self.root, width=20)
self.entry.grid(row=0, columnspan=4)
self.b1 = tk.Button(self.root, text='1', width=15, command=lambda: self.button_pressed('1'))
self.b1.grid(row=1, column=0)
self.b2 = tk.Button(self.root, text='2', width=15, command=lambda: self.button_pressed('2'))
self.b2.grid(row=1, column=1)
self.b3 = tk.Button(self.root, text='3', width=15, command=lambda: self.button_pressed('3'))
self.b3.grid(row=1, column=2)
self.b4 = tk.Button(self.root, text='+', width=15, command=lambda: self.math_button_pressed('+'))
self.b4.grid(row=1, column=3)
self.b5 = tk.Button(self.root, text='4', width=15, command=lambda: self.button_pressed('4'))
self.b5.grid(row=2, column=0)
self.b6 = tk.Button(self.root, text='5', width=15, command=lambda: self.button_pressed('5'))
self.b6.grid(row=2, column=1)
self.b7 = tk.Button(self.root, text='6', width=15, command=lambda: self.button_pressed('6'))
self.b7.grid(row=2, column=2)
self.b8 = tk.Button(self.root, text='-', width=15, command=lambda: self.math_button_pressed('-'))
self.b8.grid(row=2, column=3)
self.b9 = tk.Button(self.root, text='7', width=15, command=lambda: self.button_pressed('7'))
self.b9.grid(row=3, column=0)
self.b10 = tk.Button(self.root, text='8', width=15, command=lambda: self.button_pressed('8'))
self.b10.grid(row=3, column=1)
self.b11 = tk.Button(self.root, text='9', width=15, command=lambda: self.button_pressed('9'))
self.b11.grid(row=3, column=2)
self.b12 = tk.Button(self.root, text='*', width=15, command=lambda: self.math_button_pressed('*'))
self.b12.grid(row=3, column=3)
self.b13 = tk.Button(self.root, text='0', width=15, command=lambda: self.button_pressed('0'))
self.b13.grid(row=4, column=0)
self.b14 = tk.Button(self.root, text='c', width=15, command=lambda: self.button_pressed('c'))
self.b14.grid(row=4, column=1)
self.b15 = tk.Button(self.root, text='=', width=15, command=lambda: self.equal_button_pressed())
self.b15.grid(row=4, column=2)
self.b16 = tk.Button(self.root, text='/', width=15, command=lambda: self.math_button_pressed('/'))
self.b16.grid(row=4, column=3)
def button_pressed(self, value):
print(value, 'pressed')
if value == 'c':
self.entry.delete(0, 'end') # last가 end면 0번째부터 끝까지 다 삭제
else:
self.entry.insert("end", value)
def math_button_pressed(self, value):
global operation # 함수 바깥의 글로벌 변수사용
global temp_number
if not self.entry.get() == '': # 기존에 입력한 숫자가 있을때만 연산버튼 인식
operation = value
if self.entry.get() is int:
temp_number = int(self.entry.get()) # 입력된 숫자를 임시변수로 옮기고,
else:
temp_number = float(self.entry.get()) # 입력된 숫자를 임시변수로 옮기고,
self.entry.delete(0, 'end') # 입력칸을 비우고, 다음숫자를 입력받을 준비.
print(temp_number, operation)
def equal_button_pressed(self):
global operation
global temp_number
if not (operation == '' and self.entry.get() == ''):
number = int(self.entry.get())
if operation == '/':
solution = temp_number / number
elif operation == '*':
solution = temp_number * number
elif operation == '+':
solution = temp_number + number
else:
solution = temp_number - number
self.entry.delete(0, 'end')
self.entry.insert(0, solution)
print(temp_number, operation, number, "=", solution)
operation = ''
temp_number = 0
def main():
root = tk.Tk()
c = Calc(root)
root.mainloop()
main()
'workSpace > PYTHON' 카테고리의 다른 글
[Python] 기본 문법. (복붙해서 사용하기) (0) | 2020.12.26 |
---|---|
[Python][Tkinter] tkinter를 이용한 영단어 프로그램 (0) | 2020.12.26 |
[Python][Numpy][Jupyter Notebook] 기본 문법 (0) | 2020.12.22 |
[Python][mysql] 게시판 (0) | 2020.12.17 |
[Python] 파이썬에서 네트워크 연결하는 방법 (0) | 2020.12.14 |