파이썬 팁

파이썬] TKinter GUI 만들기 4화 - 메뉴 탭, 상단 메뉴 만들기 - Menu, Notebook

gomming 2020. 9. 27. 15:46

 

#트론 #TRX #SUN #썬

#상단메뉴만들기 #Menu

본문 끝에 전체 코드를 올려 놓았으니 필요하시면 참고하세요 ^^

 

1. 상단 메뉴 만들기

아래 이미지와 같이 상단 메뉴 탭을 적용할 수 있는 방법 입니다.

아래 코드 드립니다.

from tkinter import *
import tkinter as tk
import tkinter.ttk

notebook=tkinter.ttk.Notebook(window, width=800, height=500)
notebook.pack()

tab1=tkinter.Frame(window)
notebook.add(tab1, text="TAB1")
tab2=tkinter.Frame(window)
notebook.add(tab2, text="TAB2")
tab3=tkinter.Frame(window)
notebook.add(tab3, text="TAB3")

label1=tkinter.Label(tab1, text="TAB1")
label1.pack()

label2=tkinter.Label(tab2, text="TAB2")
label2.pack()

label3=tkinter.Label(tab3, text="TAB3")
label3.pack()

 

1) menubar = Menu(window) 의 window 위치에 적용하실 윈도우 이름을 입력하셔야 합니다.

2) Menu라는 기능으로 생성되며 순차적으로 여러 메뉴를 추가하서 이용하실 수 있습니다.

3) Separator 를 통해 기능들의 경계를 표시할 수 있습니다.

4) command = 함수이름 입력하여 사용하실 수 있어요.

 

2. 탭 적용하기

#Notebook #탭메뉴 #탭만들기

 

아래 이미지와 같이 탭을 추가하여 이용하는 방법입니다.

코드도 같이 드립니다.

 

from tkinter import *
import tkinter as tk
import tkinter.ttk

notebook=tkinter.ttk.Notebook(window, width=800, height=500)
notebook.pack()

tab1=tkinter.Frame(window)
notebook.add(tab1, text="TAB1")
tab2=tkinter.Frame(window)
notebook.add(tab2, text="TAB2")
tab3=tkinter.Frame(window)
notebook.add(tab3, text="TAB3")

label1=tkinter.Label(tab1, text="TAB1")
label1.pack()

label2=tkinter.Label(tab2, text="TAB2")
label2.pack()

label3=tkinter.Label(tab3, text="TAB3")
label3.pack()

 

import tkinter.ttk

ttk기능을 불러와야 탭 기능인 Notebook을 이용할 수 있습니다.

위에 상단 메뉴(Menu)와 같이 pack 포지셔닝이 적용되도록하여

순차적으로 탭이 자리하게 됩니다.

 

여기서는 tab1,2,3 세 개를 생성하였습니다.

위젯을 탭에 위치하기 위해서는 window 이름 들어가는 자리에 탭이름을 입력하시면 됩니다.

 

그리고 tkinter는 작성 되는 순서에 따라서 위치의 우선 순위가 결정되니 유의하셔야 합니다.

 

위 이미지에서는 유튜브 이미지가 탭보다 아래 작성되어 탭 위로 올라가있는 상황입니다.

 

그럼 이전에 작성한 위젯을 탭에 적절하게 위치시켜 보도록 하겠습니다.

탭2에 이전까지 작성한 위젯을 모두 몰아 주었습니다.

 

탭1에는 주식, 코인 시세를 불러오도록 작성해 보려고 합니다.

 

계획은 아래처럼 시세가 나오고 라벨에 커서 이동 시 차트가 나오도록 하는 건데요.. 열심히 만들어 봐야죠 ^^

 

다음 업데이트에서 계속 ~

아래 전체 코드 드립니다.

 

 

from tkinter import *
import tkinter as tk
import tkinter.ttk
import os
from collections import Counter

window = Tk()

window.title("Naver Store management program")

#################################################

notebook=tkinter.ttk.Notebook(window, width=800, height=500)
notebook.pack()

tab1=tkinter.Frame(window)
notebook.add(tab1, text=" Trading ")
tab2=tkinter.Frame(window)
notebook.add(tab2, text="Gomming")
tab3=tkinter.Frame(window)
notebook.add(tab3, text="    ???    ")

#################################################
def donothing():
   filewin = Toplevel(window)
   button = Button(filewin, text="Do nothing button")
   button.pack()

menubar = Menu(window)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=donothing)
filemenu.add_command(label="Save", command=donothing)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=window.quit)
menubar.add_cascade(label="File", menu=filemenu)

helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label="Help Index", command=donothing)
helpmenu.add_command(label="About...", command=donothing)
menubar.add_cascade(label="Help", menu=helpmenu)
###################################################

def closing(event):
    window.destroy()
    os.system('C:\\gom\\python gom_gui.py')
    
lb_hi = Label(tab2, text="Reboot", bg='gray19', fg='gray60',width=10, height=3)
lb_hi.bind('<Button-1>',closing)
lb_hi.place(x=10,y=10)

entry = tk.Entry(tab2,fg="gray19", bg="snow", width=20)
blog='blog.naver.com/xenostep'
entry.insert(0,blog)
entry.place(x=10,y=80)

entry1 = tk.Entry(tab2,fg="gray19", bg="snow", width=20)
entry1.insert(0, entry.get().split("/")[1])
entry1.place(x=10,y=100)



def cus():
    cus_list = []
    with open('C:\\gom\\gom.txt') as cus:
        for line in cus:
            cus_list.append(line)

    cus_list = cus_list[2:]

    for i in range(len(cus_list)):
        cus_all.insert(INSERT, cus_list[i])
    cus_all1.insert(INSERT, '\n'+Counter(cus_list).most_common(1)[0][0])

def clear():
    cus_all.delete(0.0,10.0)
    cus_all1.delete(0.0,3.0)

cus_all = tk.Text(tab2, width=20, height=10)
cus_all.place(x=200, y=100)
cus_all1 = tk.Text(tab2, width=20, height=3)
cus_all1.place(x=400, y=100)

load_bt = tk.Button(tab2, text='Load', bg='gray19', fg='snow', width=10, command=cus)
load_bt.place(x=300, y=400)
clear_bt = tk.Button(tab2, text='Clear', bg='royalblue', fg='snow', width=7, command=clear)
clear_bt.place(x=385, y=400)
save_bt = tk.Button(tab2, text='Save', bg='gray19', fg='snow', width=10)
save_bt.place(x=450, y=400)
lb_hi = Label(tab2, text="->",fg='gray19')
lb_hi.place(x=360,y=110)



def new_win(event):
    nw=Tk()
    nw.title("Select video")

    def closer(event):
        nw.destroy()
    nw.bind("<Escape>", closer)

    nw.geometry('300x300+300+100')
    nw.mainloop()

    

def scaled(event):
    img_lb.configure(image=img_big)
    img_lb.place(x=330, y=270)

def Re(event):
    img_lb.config(image=img)
    img_lb.place(x=360, y=300)



WDIR = "C:/gom"
img_name = "home.png"
img_name_s = "home_scale.png"

image_path = os.path.join(WDIR, img_name)
image_s_path = os.path.join(WDIR, img_name_s)

img = PhotoImage(file=image_s_path)
img_big = PhotoImage(file=image_path)
img_lb = tk.Label(tab2, image=img)
img_lb.bind("<Button-1>", new_win)
img_lb.bind("<Enter>", scaled)
img_lb.bind("<Leave>", Re)
img_lb.place(x=360, y=300)

window.config(menu=menubar)
window.geometry('800x500+300+100')
window.mainloop()