tkinterのbuttonでmessageboxのような動作をさせたい
python初学者です。
tkinterのButtonを使って、クリックするボタン(OK, cancel)によって異なる変数(True,False)を格納した後ウインドウが消えるプログラムを作成しようとしています。動きとしてはmessageboxのaskokcancelのような動きです。
普通であればmessageboxを使う所なのですが、ハイパーリンクをダイアログ中に入れたかったので、以下のようにButtonで作成しております。
本題ですが、このソースだと戻り値のbuffがどちらのボタンを押してもTrueのまま返ってきてしまいます。destroyした時点でBooleanVarへの格納は出来なくなってしまうようです。
destroyを消すと戻り値はボタンに応じて変わるようになるのですが、当然フレームが消えません。
これらを共存させるよい方法がありましたらご教示願えませんでしょうか。
Python 3.5.2 :: Anaconda 4.0.0 (32-bit)
Tcl/Tk 8.6
です。
import tkinter as tk
import webbrowser
def hyperlink(event):
webbrowser.open_new(event.widget.cget('text'))
def program_start():
root.destroy()
return lambda : buff.set(True)
def program_quit():
root.destroy()
return lambda : buff.set(False)
root = tk.Tk()
buff = tk.BooleanVar()
buff.set(True)
lbl = tk.Label(root, text=r'https://google.co.jp',fg="blue", cursor="hand2")
lbl.pack()
lbl.bind("<Button-1>", hyperlink)
tk.Button(root, text = 'OK', width=10 , command = program_start).pack()
tk.Button(root, text = 'cancel', width=10 , command = program_quit).pack()
root.mainloop()
print (buff.get())