Pythonで線画ツールを作る

Python/Tkinterで線画ツールを作ります。
Kivyに移植予定。

  1. トップページ
  2. プログラミング
  3. Pythonで線画ツールを作る
  4. GUI

スクリーンショット

gui

とりあえずこんな感じでいいんじゃないかなぁ、と。出来るだけシンプルに。
MainLine・・・線の種類です。補助線もあったらいいかなっと思って。
File・・・・・ファイル操作メニュです。開くとか保存とか。
View・・・・・画面操作メニュです。全体表示とか。
Option・・・・設定メニュです。デフォルトの線の太さとか。
後は基本、ショートカットキーもしくは右クリックでポップアップメニュで操作するスタイルに する予定。

ソース

通常のメニューやオプションメニュになんとなく必要そうな項目だけを、ラベルだけ加えました。
メソッドとの関連付けは後ほど。

マウス操作とキーボードのバインディングも空っぽだけど、やり方を忘れないように書きます。

# -*- coding: utf-8 -*-
import Tkinter as Tk

class DrawApp():

    def __init__(self):
        self.window = Tk.Tk()
        self.setGUI()
        self.resetBind()

    def mainloop(self):
        self.window.mainloop()

    def setGUI(self):
        # canvas
        self.canvas = Tk.Canvas(self.window)
        self.canvas.pack(fill=Tk.BOTH,expand=True)

        # bottom menu
        self.menu = Tk.Frame(self.window)
        self.menu.pack(fill=Tk.BOTH)

        # line type menu
        LINES = ['MainLine', 'SubLine']
        self.line_type = Tk.StringVar()
        self.line_type.set(LINES[0])
        line_menu = Tk.OptionMenu(self.menu, self.line_type, *LINES)
        line_menu.pack(side=Tk.LEFT)

        # file menu
        file_btn = Tk.Menubutton(self.menu,text='File')
        menu = Tk.Menu(file_btn,tearoff=False)
        menu.add_command(label='Open...')
        menu.add_command(label='Save...')
        menu.add_command(label='Import')
        menu.add_command(label='Export')
        file_btn.configure(menu=menu)
        file_btn.pack(side=Tk.LEFT)

        # view menu
        view_btn = Tk.Menubutton(self.menu,text='View')
        menu = Tk.Menu(view_btn,tearoff=False)
        menu.add_command(label='Zoom')
        menu.add_command(label='View All')
        menu.add_command(label='Backgraund Image...')
        view_btn.configure(menu=menu)
        view_btn.pack(side=Tk.LEFT)

        # option menu
        option_btn = Tk.Menubutton(self.menu,text='Option')
        menu = Tk.Menu(option_btn,tearoff=False)
        menu.add_command(label='Setting')
        option_btn.configure(menu=menu)
        option_btn.pack(side=Tk.LEFT)

        # message label
        self.msg = Tk.StringVar()
        msg_label = Tk.Label(self.menu,textvariable=self.msg,fg='#666666')
        msg_label.pack(side=Tk.LEFT)

        self.showMessage('App Start!')

    def showMessage(self,message):
        self.msg.set(message)

    def resetBind(self):
        self.removeBind()
        
        self.canvas.bind('<ButtonPress-1>', self.onLeftPress)
        self.canvas.bind('<ButtonPress-2>', self.onCenterPress)
        self.canvas.bind('<ButtonPress-3>', self.onRightPress)
        self.canvas.bind('<Shift-ButtonPress-3>', self.onRightPress)
        self.canvas.bind('<B1-Motion>', self.onLeftMotion)
        self.canvas.bind('<B2-Motion>', self.onCenterMotion)
        self.canvas.bind('<B3-Motion>', self.onRightMotion)
        self.canvas.bind('<ButtonRelease-1>', self.onLeftRelease)
        self.canvas.bind('<ButtonRelease-2>', self.onCenterRelease)
        self.canvas.bind('<ButtonRelease-3>', self.onRightRelease)
        self.canvas.bind('<Motion>',self.onMotion)
        self.window.bind('<KeyPress>',self.onKeyPress)
        self.window.bind('<Control-KeyPress>',self.onKeyPressCtrl)
        self.window.bind('<Alt-KeyPress>',self.onKeyPressAlt)
        self.window.bind('<MouseWheel>',self.onMouseWheel)

    def removeBind(self):
        self.canvas.unbind("<ButtonPress-1>")
        self.canvas.unbind('<ButtonPress-2>')
        self.canvas.unbind('<ButtonPress-3>')
        self.canvas.unbind('<B1-Motion>')
        self.canvas.unbind('<B2-Motion>')
        self.canvas.unbind('<B3-Motion>')
        self.canvas.unbind('<ButtonRelease-1>')
        self.canvas.unbind('<ButtonRelease-2>')
        self.canvas.unbind('<ButtonRelease-3>')
        self.window.unbind('<KeyPress>')
        self.window.unbind('<KeyRelease>')

    def onMotion(self,event):
        return

    def onLeftPress(self,event):
        return

    def onLeftMotion(self,event):
        return

    def onLeftRelease(self,event):
        return

    def onRightPress(self,event):
        return

    def onRightMotion(self,event):
        return

    def onRightRelease(self,event):
        return

    def onCenterPress(self,event):
        return

    def onCenterMotion(self,event):
        return

    def onCenterRelease(self,event):
        return

    def onKeyPress(self,event):
        return

    def onKeyPressCtrl(self,event):
        return

    def onKeyPressAlt(self,event):
        return

    def onKeyRelease(self,event):
        return

    def onMouseWheel(self,event):
        return



def main():
    app = DrawApp()
    app.mainloop()


if __name__ == '__main__':
    main()
ページトップへ

TibLab MENU

Copyright (C) TibLab All Rights Reserved.