메뉴 상자에서 프로그램 실행

데스크탑 툴(노라 툴)을 몇개 작성하면, exe 파일의 쇼트 컷이 줄지어, 아름답지 않기 때문에,

이런 메뉴 상자를 파이썬으로 만들어 보았습니다.


환경


  • OS : Windows 10 64bit
  • Python 3.6.0 (Anaconda3-4.3.1)

  • 사용한 모듈


  • TKInter
  • subprocess
  • sys

  • TKinter란?



    Python의 표준 GUI 도구입니다.
    이제 Python 스크립트를 GUI 형식으로 실행할 수 있습니다.
    여기에서는 메뉴 상자의 GUI를 제공하는 데 사용했습니다.

    subprocess란?



    파이썬에서 명령을 실행하는 모듈입니다.
    외부 파일의 실행을 파이썬에서 할 수 있습니다.
    여기서는 각 프로그램 버튼을 클릭하여 외부 파일을 실행하는 데 사용했습니다.

    sys란?



    파이썬 인터프리터 및 실행 환경과 관련된 변수와 함수가 결합 된 라이브러리입니다.
    여기에서는 메뉴 상자를 종료하는 데 사용했습니다.

    코드



    menu.py
    import tkinter as tk
    import sys
    import subprocess
    
    def program_1():
        subprocess.Popen(r'C:\python\program_1.exe')
    
    def program_2():
        subprocess.Popen(r'C:\python\program_2.exe')
    
    def program_3():
        subprocess.Popen(r'C:\python\program_3.exe')
    
    def finish_menu():
        sys.exit()
    
    #操作メニューボックス
    root = tk.Tk()
    root.title(u"操作メニュー")
    root.geometry("280x240")
    
    # プログラム1
    labeltitle = tk.Label(root, text=u'■■■操作メニュー■■■')
    labeltitle.pack()
    Label_Blanc = tk.Label(root, text=u'')
    Label_Blanc.pack()
    program_1_Button = tk.Button(root, text=u'プログラム1', width=30)
    program_1_Button["command"] = program_1
    program_1_Button.pack()
    
    # プログラム2
    Label_Blanc = tk.Label(root, text=u'')
    Label_Blanc.pack()
    program_2_Button = tk.Button(root, text=u'プログラム2', width=30)
    program_2_Button["command"] = program_2
    program_2_Button.pack()
    
    # プログラム3
    Label_Blanc = tk.Label(root, text=u'')
    Label_Blanc.pack()
    program_3_Button = tk.Button(root, text=u'プログラム3', width=30)
    program_3_Button["command"] = program_3
    program_3_Button.pack()
    
    # 終了
    Label_Blanc = tk.Label(root, text=u'')
    Label_Blanc.pack()
    finish_menu_Button = tk.Button(root, text=u'終了')
    finish_menu_Button["command"] = finish_menu
    finish_menu_Button.pack()
    
    root.mainloop()
    

    설명



    subprocess.Popen()



    프로그램 버튼을 클릭할 때 동작의 함수를 만듭니다.subprosess.Popen 는 외부 파일을 실행하는 메소드입니다.
    실행할 exe 파일을 절대 경로로 설명합니다.

    menu.py
    def program_1():
        subprocess.Popen(r'C:\python\program_1.exe')
    

    sys.exit()



    종료 버튼을 클릭했을 때의 동작 함수.sys.exit() 는 프로그램을 종료시키는 메소드입니다.

    menu.py
    def finish_menu():
        sys.exit()
    

    메시지 상자(TKinter)



    버튼 클릭시 함수를 작성한 후 TKinter 모듈에서 메시지 상자를 정의합니다.

    창 정의



    menu.py
    root = tk.Tk()
    root.title(u"操作メニュー")
    root.geometry("280x240")
    

    메시지 상자 창을 정의합니다.root = tk.Tk() 이 창의 이름(루트).root.title(u"ウィンドウ名") 는 타이틀 바의 표기(조작 메뉴).root.geometry("縦x横") 는 윈도우 크기입니다 (세로 280px ✕ 가로 240px).

    상자에 라벨 정의



    menu.py
    labeltitle = tk.Label(root, text=u'■■■操作メニュー■■■')
    labeltitle.pack()
    Label_Blanc = tk.Label(root, text=u'')
    Label_Blanc.pack()
    
    labeltitle = tk.label(ウィンドウ名,, text=u'テキスト') 에서 창의 레이블 내용을 정의하고,labeltitle.pack() 에서 창에 저장합니다.
    Label_Blanc = tk.Label(root, text=u'')
    Label_Blanc.pack()
    는 1행분 스페이스를 비우기 위해서 넣고 있습니다.
    (이것이 올바른 작법인지 확실하지 않습니다)

    상자의 버튼 정의



    menu.py
    program_1_Button = tk.Button(root, text=u'プログラム1' width=30)
    program_1_Button["command"] = program_1
    program_1_Button.pack()
    
    program_1_Button = tk.Button(ウィンドウ名,, text=u'テキスト') 에서 창의 버튼 내용을 정의합니다.
    폭을 지정하고 싶은 경우는 width=xx 로 지정.program_1_Button["command"] = 関数名 에서 호출할 함수를 정의합니다.program_1_Button.pack() 에서 창에 저장합니다.

    메인 루프



    menu.py
    root.mainloop()
    

    윈도우가 마우스 조작 등에 대응할 수 있도록 메인 루프를 실행한다.
    Tkinter에서는 이 한 줄이 중요해지므로 쓰는 것을 잊지 않도록 하는 것.

    프로그램의 실행 내용의 처리는,root = Tkinter.Tk()그리고root.mainloop()사이에 기재한다.

    좋은 웹페이지 즐겨찾기