221028 Python #26

김혜진·2022년 10월 28일
0

Python

목록 보기
24/24

파이썬 GUI


Tkinter

체크박스

from tkinter import *
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

chkclick = IntVar()
chkclick2 = IntVar()

chkbox1 = Checkbutton(root, text ="오늘 하루 그만 보기" , variable=chkclick)
chkbox1.pack()

chkbox2 = Checkbutton(root, text ="1주일 동안 보지 않기" , variable=chkclick2)
chkbox2.pack()

def getCheck():
    print('체크 상태 : ', chkclick.get())

Button(root, text ="확인", command=getCheck).pack()

chkbox1.select()
chkbox2.deselect()

root.mainloop()

라디오 버튼

from tkinter import *
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

Label(root, text="햄버거를 선택하세요").pack()

burger_var = StringVar() # 문자열 형태의 변수값을 넣겠다.

btn_burger1 = Radiobutton(root, text="불고기버거", value="불고기버거", variable=burger_var)
btn_burger2 = Radiobutton(root, text="치즈버거", value="치즈버거", variable=burger_var)
btn_burger3 = Radiobutton(root, text="치킨버거", value="치킨버거", variable=burger_var)

btn_burger1.pack()
btn_burger2.pack()
btn_burger3.pack()

btn_burger1.select() # 체크박스 하나만 눌려있게 하기

def order():
    print(burger_var.get() + '를 선택하였습니다.')

Button(root, text="주문", command=order).pack()

root.mainloop()

콤보박스

from os import stat
import tkinter.ttk as ttk
from tkinter import *
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

dateVal = [str(i) + "일" for i in range(1,32)] # [1,2,3,4,5]

combobox = ttk.Combobox(root, height=10, values=dateVal, state="readonly")
combobox.current(0)
combobox.pack()
combobox.set("통장은 거들뿐")

def selectDate():
    print(combobox.get())

Button(root, text="날짜 선택", command=selectDate).pack()

root.mainloop()

프로그레스 바

import time
import tkinter.ttk as ttk
from tkinter import *
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

p_var = DoubleVar()

progressbar1 = ttk.Progressbar(root, maximum=100, length=400, variable=p_var, mode="determinate")
progressbar1.pack()

progressbar2 = ttk.Progressbar(root, maximum=100, mode="indeterminate")
progressbar2.pack()

def btnStart():
    for i in range(1,101):
        time.sleep(0.01)
        p_var.set(i)
        progressbar1.update()
        print(p_var.get())

    # progressbar1.start(10)
    # progressbar2.start(10)

Button(root, text="전송", command=btnStart).pack()

def btnStop():
    progressbar1.stop()
    # progressbar2.stop()

Button(root, text="정지", command=btnStop).pack()

root.mainloop()

메뉴

import tkinter.ttk as ttk
from tkinter import *
import tkinter.messagebox as msgbox
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

def newFile():
    print('파일을 새로 만듭니다.')

mymenu = Menu(root)
menu_file = Menu(mymenu, tearoff=0)
menu_file.add_command(label="New File" , command=newFile)
menu_file.add_command(label="New Window")
menu_file.add_separator()
menu_file.add_command(label="Open File")
menu_file.add_command(label="Save File")
menu_file.add_separator()
menu_file.add_command(label="Exit", command=root.quit)

mymenu.add_cascade(label="File", menu=menu_file)
mymenu.add_cascade(label="Edit")

def showminimap():
    msgbox.showinfo("알림", "미니맵을 보여줍니다.")

def showmaxmap():
    msgbox.showinfo("알림", "맥스맵을 보여줍니다.")

menu_view = Menu(mymenu, tearoff=0)
menu_view.add_checkbutton(label="Show minimap", command=showminimap)
menu_view.add_checkbutton(label="Show mmaxmap", command=showmaxmap)
mymenu.add_cascade(label="View", menu=menu_view)

root.config(menu=mymenu)

root.mainloop()

메시지박스

import tkinter.ttk as ttk
from tkinter import *
import tkinter.messagebox as msgbox
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

def info():
    msgbox.showinfo("알림", "정상적으로 예매가 완료되었습니다.")
def warn():
    msgbox.showwarning("경고", "해당 좌석은 매진되었습니다.")
def error():
    msgbox.showerror("에러", "결제 오류가 발생하였습니다.")
def okcancel():
    result = msgbox.askokcancel("확인/취소", "해당 좌석은 유아동반석입니다. 예매하시겠습니까?")

    if(result == 1):
        msgbox.showinfo("알림", "정상적으로 예매가 완료되었습니다.")
    elif result == 0:
       msgbox.showinfo("알림", "취소되었습니다.")


Button(root, command=info, text="알림").pack()
Button(root, command=warn, text="경고").pack()
Button(root, command=error, text="에러").pack()
Button(root, command=okcancel, text="확인/취소").pack()

root.mainloop()

그리드

  • 격자인데 보통 바둑판에 비유되고, 바둑판 격자 하나하나에 삽입될 다양한 것들을 디자인할 때 유용하게 사용.

  • 그리드 시작 전 pack과 grid를 적용한 버튼 실행결과

    그리드는 위치를 지정해서 원하는 버튼을 넣을 수 있는 장점이 있다.

import tkinter.ttk as ttk
from tkinter import *
import tkinter.messagebox as msgbox
root = Tk()

root.title("Python GUI")
root.geometry("800x640+500+100")

Button(root, text="F16", width=10, height=3).grid(row=0, column=0)
Button(root, text="F17", width=10, height=3).grid(row=0, column=1)
Button(root, text="F18", width=10, height=3).grid(row=0, column=2)
Button(root, text="F19", width=10, height=3).grid(row=0, column=3)

Button(root, text="clear", width=10, height=3).grid(row=1, column=0)
Button(root, text="=", width=10, height=3).grid(row=1, column=1)
Button(root, text="/", width=10, height=3).grid(row=1, column=2)
Button(root, text="*", width=10, height=3).grid(row=1, column=3)

Button(root, text="7", width=10, height=3).grid(row=2, column=0)
Button(root, text="8", width=10, height=3).grid(row=2, column=1)
Button(root, text="9", width=10, height=3).grid(row=2, column=2)
Button(root, text="-", width=10, height=3).grid(row=2, column=3)

Button(root, text="4", width=10, height=3).grid(row=3, column=0)
Button(root, text="5", width=10, height=3).grid(row=3, column=1)
Button(root, text="6", width=10, height=3).grid(row=3, column=2)
Button(root, text="+", width=10, height=3).grid(row=3, column=3)

Button(root, text="1", width=10, height=3).grid(row=4, column=0)
Button(root, text="2", width=10, height=3).grid(row=4, column=1)
Button(root, text="3", width=10, height=3).grid(row=4, column=2)
Button(root, text="enter", width=10, height=3).grid(row=4, column=3)

numEdit = Entry(root, width=45)
numEdit.insert(END, "숫자를 입력하세요")
numEdit.grid(row=5, column=0, columnspan=4)

root.mainloop()

profile
알고 쓰자!

0개의 댓글