tkinter GUI
파이썬엔 GUI 제작에 사용되는 라이브러리가 여럿 있는데 그중, 가장 흔히 접할 수 있는 게 tkinter이다.
문법이나 자료형 같은 기본적인 지식 없이 무작정 시작했기에 여러 글을 참고하여 작성했으며 작성자와 같은 초보들에게 조금이나마 도움되었으면 한다.
import pickle
import webbrowser
from tkinter import *
from os import path
# Create Binary File
ETC = list()
if path.exists('C:/Users/ETC.txt') == False:
with open('C:/Users/ETC.txt','wb') as f:
pass
else:
with open('C:/Users/ETC.txt', 'rb') as f:
ETC = pickle.load(f)
# 바이너리 파일이 완전히 비어있으면 EOFError 반환
# 리스트 객체 읽고 쓰기 - Pickle
#====================================================================================#
def whichSelected():
print ("At %s of %d" % (select.curselection(), len(ETC)))
return int(select.curselection()[0])
def addEntry():
ETC.append([NameVar.get(), URLVar.get(), SiteVar.get()])
setSelect()
with open('C:/Users/ETC.txt', 'wb') as f:
pickle.dump(ETC,f)
def updateEntry():
ETC[whichSelected()] = [NameVar.get(), URLVar.get(), SiteVar.get()]
setSelect()
with open('C:/Users/ETC.txt', 'wb') as f:
pickle.dump(ETC,f)
def deleteEntry():
del ETC[whichSelected()]
setSelect()
with open('C:/Users/ETC.txt', 'wb') as f:
pickle.dump(ETC,f)
def loadEntry():
lbName, lbURL, lbSite = ETC[whichSelected()]
NameVar.set(lbName)
URLVar.set(lbURL)
SiteVar.set(lbSite)
def SearchEntry(): # 예외처리 미구현 / 기본 브라우저(사용자 설정)로 해당 사이트 접속
open_site = ((ETC[whichSelected()][1]))
a= open_site.find('https://')
if a == -1:
a = ("https://")+open_site
webbrowser.open(a)
else:
webbrowser.open(open_site)
def setSelect () :
ETC.sort()
select.delete(0,END)
for lbName,lbURL,lbSite in ETC :
select.insert (END, lbName)
# 기능 구현(버튼)
#====================================================================================#
def MakeWindow():
global NameVar, URLVar, SiteVar, select
win = Tk()
win.title("My Pocket")
win.geometry("600x300")
# 메뉴 생성 및 구성
menubar = Menu(win)
win.config(menu=menubar)
filemenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label="File", menu=filemenu)
filemenu.add_command(label="Exit", command=win.quit)
# status_bar = Label(win,text='Bookmark ', anchor=E)
# status_bar.pack(fill=X, side=BOTTOM, ipady=5)
frame1 = Frame(win)
frame1.pack()
# 라벨(레이블) 생성
Label(frame1, text=" URL").grid(row=0, column=0, sticky=W)
URLVar = StringVar()
lbURL = Entry(frame1, textvariable=URLVar, width=40)
lbURL.grid(row=0, column=1, pady=5, sticky=W)
Label(frame1, text="Name").grid(row=1, column=0, sticky=W)
NameVar = StringVar()
lbName = Entry(frame1, textvariable=NameVar, width=40)
lbName.grid(row=1, column=1, pady=5, sticky=W)
Label(frame1, text=" Site").grid(row=2, column=0, sticky=W)
SiteVar = StringVar()
lbSite = Entry(frame1, textvariable=SiteVar, width=40)
lbSite.grid(row=2, column=1, pady=5, sticky=W)
frame2 = Frame(win)
frame2.pack()
# 버튼 생성
b1 = Button(frame2,text=" Add ",command=addEntry)
b2 = Button(frame2,text="Update",command=updateEntry)
b3 = Button(frame2,text="Delete",command=deleteEntry)
b4 = Button(frame2,text=" Load ",command=loadEntry)
b5 = Button(frame2,text="Search",command=SearchEntry)
b1.pack(side=LEFT); b2.pack(side=LEFT)
b3.pack(side=LEFT); b4.pack(side=LEFT)
b5.pack(side=LEFT); # 버튼 정렬
frame3 = Frame(win)
frame3.pack()
# 스크롤 / 리스트 박스 생성
scroll = Scrollbar(frame3, orient=VERTICAL)
select = Listbox(frame3, yscrollcommand=scroll.set, height=10, width=50)
scroll.config (command=select.yview)
scroll.pack(side=RIGHT, fill=Y)
select.pack(side=LEFT, fill=BOTH, expand=1, pady=5)
return win
win = MakeWindow()
setSelect()
win.mainloop()
# 윈도우(메인) 구현
#====================================================================================#
참고 및 인용 - https://www.openbookproject.net/py4fun/gui/tkPhone.html
반응형
'컴퓨터 > Python' 카테고리의 다른 글
[Python] tkinter 시계 (0) | 2021.10.28 |
---|
댓글