Windows 7 で Python 3.3 を使用していtkinterます。このように (これは完全で実行可能な例です):Buttontkinter.simpledialog.Dialog
import tkinter
import tkinter.simpledialog
class Mainframe(tkinter.Frame):
def __init__(self, parent):
super(Mainframe, self).__init__(parent)
self.parent = parent
self.button = tkinter.Button(self, text="Open Dialog")
open_dialog_op = lambda ev: self.open_dialog(ev)
self.button.bind("<Button-1>", open_dialog_op)
self.button.bind("<Return>", open_dialog_op)
self.button.pack(side=tkinter.LEFT)
def open_dialog(self, event):
dialog = tkinter.simpledialog.Dialog(self.parent, "My Dialog")
self.button.config(relief=tkinter.RAISED) # does not help!
root = tkinter.Tk()
Mainframe(root).pack()
root.mainloop()
動作:
- 「ダイアログを開く」 にフォーカスしてRETURN
Buttonと入力すると、すべてうまく機能します - をマウスクリックする
Buttonと、ダイアログは正常に表示されますが、 - ダイアログが閉じると、「Open Dialog」
Buttonが押された状態で表示されます (tkinter.SUNKEN間違っていなければ?)。 - (興味深いことに、ダイアログが開いている間
Buttonは が正常に表示されます。落ち込んだ外観は、ダイアログが閉じたときにのみ開始されます。) - を呼び出すだけで問題を修復しようとしました
button.config(relief=tkinter.RAISED)が、この場合は何もしていないようです。
(実際には、私の完全なアプリケーションは、ダイアログが再び閉じられたときだけでなく、クリックされた直後にボタンが押された状態で表示され始めます
。これはもっと論理的だと思います。simpledialogローカル イベント ループsimpledialog
はモーダルであるため、すべてのイベントを取得します。これには<ButtonRelease-1>マウスが含まれる可能性があります)。ボタンでのイベント?)
質問:
- なぜこれが起こるのですか?
- 完全なアプリケーションの動作が異なるのはなぜですか?
- 両方を回避または修復するにはどうすればよいですか?