Tkinter 튜토리얼-메뉴 바

Jinku Hu 2023년1월30일
  1. Tkinter 기본 메뉴 바
  2. Tkinter 메뉴 바 명령
Tkinter 튜토리얼-메뉴 바

GUI 에서 가장 일반적인 요소 중 하나는 메뉴 표시 줄입니다. 메뉴 막대는 일반적으로 일련의 메뉴를 표시하기 위해 제목 표시 줄 아래에 있습니다. 최상위 메뉴 중 하나를 클릭하면 하위 메뉴가 확장되어보다 관련성이 높은 메뉴 항목이 표시됩니다. 하위 메뉴는 일반적으로 open,close,save 또는 quit 와 같은 특정 명령에 바인딩됩니다.

Tkinter 기본 메뉴 바

대부분의 편집기에서와 같이 File메뉴가있는 첫 번째 메뉴 표시 줄 예제를 작성합니다. 단순성을 위해 ‘열기’, ‘저장’및 ‘종료’하위 메뉴 만 포함합니다.

import tkinter as tk

app = tk.Tk()
app.geometry("300x200")
app.title("Basic Menu Bar")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()

Tkinter 메뉴 바 기본

menubar = tk.Menu(app)

Menu 의 주어진 파라미터는 생성 된 메뉴의 부모 위젯입니다. 위의 코드 라인은 메뉴 위젯 menubar 가 프레임 app 의 최상위 레벨이됨을 의미합니다.

filemenu = tk.Menu(menubar)

마찬가지로 filemenu 는 위젯 menubar 의 메뉴이거나 app 프레임의 하위 메뉴입니다.

filemenu.add_command(label="Open")

add_command 는 메뉴 filemenu 에 명령을 추가합니다. label 은 하위 메뉴에 표시되는 텍스트입니다.

menubar.add_cascade(label="File", menu=filemenu)

filemenuadd_cascade 명령으로 menubar 에 추가됩니다. Fileapp 프레임의 최상위 레벨에 표시되는 메뉴 레이블입니다.

app.config(menu=menubar)

menubar 는 위에서 설명한 것처럼 app 의 하위 위젯으로 만들어 지지만, 여전히 appmenu 가되도록 구성해야합니다. 그렇지 않으면 GUI 에 메뉴 표시 줄이 표시되지 않습니다.

File 의 하위 메뉴에서 Open 또는 Save 와 같은 옵션을 클릭하면 명령이 없기 때문에 전혀 응답하지 않습니다. 다음 세션에서 명령을 기능적으로 만들 것입니다.

Tkinter 메뉴 바 명령

import tkinter as tk
from tkinter import filedialog


def onOpen():
    print(
        filedialog.askopenfilename(
            initialdir="/",
            title="Open file",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )


def onSave():
    print(
        filedialog.asksaveasfilename(
            initialdir="/",
            title="Save as",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )


app = tk.Tk()
app.geometry("300x200")
app.title("Menu Bar Command")

menubar = tk.Menu(app)

filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)

menubar.add_cascade(label="File", menu=filemenu)

app.config(menu=menubar)

app.mainloop()
filemenu = tk.Menu(menubar, tearoff=0)

tearoff 는 기본적으로 1 로 설정되어 있으며 상단의 점선을 클릭하면 플로팅 메뉴를 만들기 위해 메뉴를 기본 창에서 분리합니다. 이 플로팅 기능을 비활성화하려면 0으로 설정됩니다.

filemenu.add_command(label="Open", command=onOpen)

onOpen기능은 메뉴 Open에 바인딩되어 있으며 Open을 클릭하면 호출됩니다.

def onOpen():
    print(
        filedialog.askopenfilename(
            initialdir="/",
            title="Open file",
            filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
        )
    )

이 함수는 열린 대화 상자를 표시하고 선택한 파일 이름을 반환합니다. 우리 예제에서는 실제로 파일을 열지 않고 파일 이름을 인쇄합니다.

tkfiledialog 에는 세 가지 기능이 있습니다.

함수 매개 변수 기술
.askopenfilename 디렉토리, 제목, 확장 ** 파일을 열려면 ** : 기존 파일의 선택을 요청하는 대화 상자.
.asksaveas 파일 이름 디렉토리, 제목, 확장자 ** 저장 ** 파일 : 파일 작성 또는 교체를 요청하는 대화 상자.
.askdirectory 없음 ** 디렉토리 열기 **
filemenu.add_command(label="Exit", command=app.quit)

Tkinter 에는 루트 GUI 를 종료하는 내부 quit기능이 있습니다. 우리는 우리 자신의 exit 함수를 생성하는 대신이 기존 함수를 Exit 에 바인드 할 수 있습니다.

작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook