Py2app와 Tkinter로 네이티브 같은 GUI 앱 만들기

6949 단어 Tkinter파이썬

소개



파이썬에서 GUI 앱을 만든 적이 없었다고 생각했기 때문에 시도해 보았습니다.
또, GUI의 스크립트만 쓰는 것도 재미없기 때문에, 그 스크립트를 Mac의 네이티브 앱 형식으로 출력, 실행할 수 있도록 해 보았습니다.

사용하는 것


  • Tkinter
    파이썬에 표준으로 탑재된 GUI 라이브러리. (바르게 말하면 Tcl/Tk에 대한 인터페이스)
  • Py2app
    만든 Python 프로그램을 Mac의 어플리케이션 실행 형식(app)으로 변환하는 툴.

  • 코드



    tkinter의 공식 문서에 기재된 코드를 거의 그대로 가져왔다.

    변경한 부분은 say_hi 메소드가 print 문장으로 메세지 출력하는 것이었으므로, 거기를 메세지 박스를 내도록 해 보았습니다.

    도중, Tkinter의 모듈을 모두 임포트하고 있음에도 불구하고, tkMessageBox 클래스를 찾을 수 없다고 말해 조금만 고전. (tkMessageBox 클래스가 최상위 클래스라고 생각하지 않았습니다...)

    tk.py
    from Tkinter import *
    import tkMessageBox
    
    class Application(Frame):
        def say_hi(self):
            tkMessageBox.showinfo('info', 'hi there, everyone!')
    
        def createWidgets(self):
            self.QUIT = Button(self)
            self.QUIT["text"] = "QUIT"
            self.QUIT["fg"]   = "red"
            self.QUIT["command"] =  self.quit
    
            self.QUIT.pack({"side": "left"})
    
            self.hi_there = Button(self)
            self.hi_there["text"] = "Hello",
            self.hi_there["command"] = self.say_hi
    
            self.hi_there.pack({"side": "left"})
    
        def __init__(self, master=None):
            Frame.__init__(self, master)
            self.pack()
            self.createWidgets()
    
    root = Tk()
    app = Application(master=root)
    app.mainloop()
    root.destroy()
    

    실행하면 이런 느낌.



    Hello를 클릭해 봅니다.



    네, 안전 메시지 상자가 나왔습니다.
    결과적으로는 조금 멋집니다만, 이대로 진행합니다.

    Py2app로 짹짹



    우선 Py2app를 pip로 넣어 봅시다.
    $ pip install py2app
    

    튜토리얼을 따라가면 우선 setup.py가 필요한 것 같습니다. py2applet 라는 편리한 커멘드가 있는 것처럼, 그것을 이용해 setup.py 를 작성합니다.
    $ py2applet --make-setup tk.py
    

    그리고 setup.py를 실행하여 앱을 만듭니다.
    $ python setup.py py2app
    

    2017/02/09 수정 -A파라미터를 붙이면 다른 환경으로부터 실행할 수 없기 때문에 상기 커멘드로부터 제거했습니다.

    완성하면 아래와 같이 dist 디렉토리 이하에 파일이 배치됩니다.



    그 파일을 더블 클릭하면 안전하게 실행되었습니다! 꽤 쉽습니다.
    파이썬에서 GUI 앱을 작성하는 것이 대부분의 장애물이 낮다는 것을 알았기 때문에 여러 가지 시도하고 싶습니다.

    참고


  • htps : // / cs. py 응. rg/2/ぃb 등 ry/t 킨 r. HTML
  • htps : // py 텐호 s 테 d. rg/py2 있어 p/
  • 좋은 웹페이지 즐겨찾기