Windows 7 で Python 3.3 を使用していtkinter
ます。このように (これは完全で実行可能な例です):Button
tkinter.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>
マウスが含まれる可能性があります)。ボタンでのイベント?)
質問:
- なぜこれが起こるのですか?
- 完全なアプリケーションの動作が異なるのはなぜですか?
- 両方を回避または修復するにはどうすればよいですか?