クソの役にも立たないツールをクソみたいに苦労して書いた。もともとクラス継承を扱う練習をしてただけなんだけれど、とりあえず何かかたちになるものを作るのが好きなんだな俺は。このツールで出来るのは、名前を選択し、作業内容と時間を書いてテキストファイルに出力すること。

名前選択はコンボボックスになっているので、俺が予め設定した5名(MATE設立メンバー)しか選べない。なんだよクソの役にも立たないじゃないか。だからクソの役にも立たないんだってば!

苦労したところっていうのはコンボボックスの扱いについて。 Tkinter にはコンボボックスのウィジェットがないので ttk を使う。やりたいことはコンボボックスから値を受け取ったり出力することなのだけど、そこの仕様が Tkinter のエントリーとは違ったようで手ひどく噛まれたのだ(どこかの Python サイトでミスすることを噛まれるって書いてて面白かったので俺も使わせて頂く。ちなみに Python は錦蛇のこと)。

# A
name = Tk.StringVar()

def output(a):
    print a

def get_value():
    if name.get():
        name = name.get()
    output(name)

entry = Tk.Entry(parent, textvariable = name)
entry.pack()

(A)これが Tkinter のみ使っている場合の値取得。 {値の名前}.get() でウィジェット内の値を取得できる。

# B
name = Tk.StringVar()

def output(a):
    print a

def get_value():
    if combobox.get():
        name = combobox.get()
    output(name)

combobox = ttk.Combobox(parent, textvariable = name, values = ('Foo', 'Bar'))
combobox.pack()

(B)こっちが ttk を使う場合の値取得。 {値が入ってるウィジェットの名前}.get() でウィジェット内の値を取得できる。気付くかこんなもん!

ttk コンボボックスの記事って日本語ではスゲー少なくて、うんざりしながら英語のサイトをめぐり似たようなコードを見かけてようやく気づけた。同じような初学者 pythonista のためにこういうのはちょこちょこ書いてったらいいかもしれない。