tkinterで忘れがちなこと色々 其の3
いつもPyrhonプログラムを作るときに調べながら作るけどもすぐ忘れてしまう。なのでメモを残しておこうと。其の3。
目次
メニューを付ける
import tkinter if __name__ == '__main__': root = tkinter.Tk() menu = tkinter.Menu(root) root.configure(menu = menu) menu.add_command(label="Quit", command=root.quit) tkinter.mainloop()
実行終了のためのQuitを付けただけの一番シンプルな例。普通のボタンと同じように、クリックするとadd_commandで登録したメソッド(この場合root.quit)が呼ばれる。
「Folder」クリック時
「Save」クリック時
チェックボタンはadd_checkbuttonで追加する。onvalue, offvalueに値を登録しておくと、選択、未選択時にvariableに格納される値を制御可能。この例では設定してもしなくても動作は同じ。
見やすさのためのにセパレータも設定可能。この例では、チェックボタンとラジオボタンの境目が分かりづらいのでセパレータを追加している。
ラジオボタンはadd_radiobuttonで追加する。valueに値を登録して選択時の値を制御する。
メニューを階層化する
import tkinter if __name__ == '__main__': def dummy(string): print(string) root = tkinter.Tk() menu = tkinter.Menu(root) root.configure(menu=menu) menu1 = tkinter.Menu(menu) menu1.add_command(label="11", command=lambda x=11: dummy(x)) menu1.add_command(label="12", command=lambda x=12: dummy(x)) menu1.add_command(label="13", command=lambda x=13: dummy(x)) menu2 = tkinter.Menu(menu1) menu2.add_command(label="21", command=lambda x=21: dummy(x)) menu2.add_command(label="22", command=lambda x=22: dummy(x)) menu2.add_command(label="22", command=lambda x=23: dummy(x)) menu.add_cascade(label="menu1", menu=menu1) menu1.add_cascade(label="manu2", menu=menu2) menu.add_command(label="Quit", command=root.quit) tkinter.mainloop()
実行結果は以下の通り。
メニューを階層化して機能を整理分類しつつ多く実装したい場合に便利な例。tkinter.Menuで作成したオブジェクトをadd_cascadeで追加していく。各メニュー内の項目はadd_command等で追加していく。(尚、上記の例ではlambda式を利用しているが、どの目項目がクリックされたかをわかりやすくするためで本質的な意味はない)
定義済みの便利機能を利用する
import tkinter from tkinter.filedialog import * if __name__ == '__main__': def open_file(): name = askopenfilename() print(name) def open_dir(): name = askdirectory() print(name) def save_file(): name = asksaveasfilename(title='save', filetypes=(('all', '*'), ('txt','txt'))) print(name) def check_status(): print(cvalue[0].get(), cvalue[1].get(), cvalue[2].get(), rvalue.get()) root = tkinter.Tk() menu = tkinter.Menu(root) root.configure(menu=menu) filemenu = tkinter.Menu(menu) menu.add_cascade(label="Menu", menu=filemenu) menu.add_command(label="File", command=open_file) menu.add_command(label="Folder", command=open_dir) menu.add_command(label="Check", command=check_status) menu.add_command(label="Save", command=save_file) menu.add_command(label="Quit", command=root.quit) cvalue = [tkinter.BooleanVar(), tkinter.BooleanVar(), tkinter.BooleanVar()] cvalue[0].set(True) filemenu.add_checkbutton(label="Op.1", onvalue=True, offvalue=False, variable=cvalue[0]) filemenu.add_checkbutton(label="Op.2", onvalue=True, offvalue=False, variable=cvalue[1]) filemenu.add_checkbutton(label="Op.3", onvalue=True, offvalue=False, variable=cvalue[2]) filemenu.add_separator() rvalue = tkinter.IntVar() rvalue.set(1) filemenu.add_radiobutton(label="Op.1", value=0, variable=rvalue) filemenu.add_radiobutton(label="Op.2", value=1, variable=rvalue) filemenu.add_radiobutton(label="Op.3", value=2, variable=rvalue) tkinter.mainloop()
実行結果は以下の通り。
「File」をクリック時
「Folder」クリック時
「Save」クリック時
ファイルを読み込んだり、書き込んだりする際に便利な機能群とチェックボタン(複数選択可能)、ラジオボタン(単一のみ選択可能)の例。Windowアプリで利用しそうな機能は概ね揃っており(マニュアルを探すのは面倒だが)
tkinter.filedialogに多くが用意されている。上記ではaskopenfilename, askdirectory, asksaveasfilenameの3通りを利用しているがそのほかにも数種類用意されている。Web上の情報ではtkFileDialogというPython2の際の名称で説明されていることが多いようなので参照する場合には注意が必要。チェックボタンはadd_checkbuttonで追加する。onvalue, offvalueに値を登録しておくと、選択、未選択時にvariableに格納される値を制御可能。この例では設定してもしなくても動作は同じ。
cvalue = [tkinter.BooleanVar(), tkinter.BooleanVar(), tkinter.BooleanVar()] cvalue[0].set(True) filemenu.add_checkbutton(label="Op.1", onvalue=True, offvalue=False, variable=cvalue[0]) filemenu.add_checkbutton(label="Op.2", onvalue=True, offvalue=False, variable=cvalue[1]) filemenu.add_checkbutton(label="Op.3", onvalue=True, offvalue=False, variable=cvalue[2])
見やすさのためのにセパレータも設定可能。この例では、チェックボタンとラジオボタンの境目が分かりづらいのでセパレータを追加している。
filemenu.add_separator()
ラジオボタンはadd_radiobuttonで追加する。valueに値を登録して選択時の値を制御する。
rvalue = tkinter.IntVar() rvalue.set(1) filemenu.add_radiobutton(label="Op.1", value=0, variable=rvalue) filemenu.add_radiobutton(label="Op.2", value=1, variable=rvalue) filemenu.add_radiobutton(label="Op.3", value=2, variable=rvalue)
コメント
コメントを投稿