前提
pytnon tkinter でアプリケーション作成をしています。
ウィンドウ内をクリック → Entryを配置 → 文字入力 → Labelにして配置
という流れです。
それにメニューバーを追加したのですが、 Entry配置 の時にメニューバー(ウィンドウ上段)をクリックした場合 Entryの配置を消したい(キャンセル)のですが、意図通りできません。
実現したいこと
- ウィンドウ上段のメニューバーをクリック、またはフォーカスが移った場合、それを検知して、動作待ちの命令をキャンセルしたい。(Entry配置の時キャンセル)
- ComboBoxのプルダウンリストが表示され、他の操作をした時のイメージです。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
python
1import tkinter as tk 2 3root = tk.Tk() 4root.geometry("500x500") 5 6menubar = tk.Menu(root) 7menu1 = tk.Menu(menubar, tearoff=False) 8menubar.add_cascade(label="menu-1", menu=menu1) 9menu1.add_command(label="menu-1-1") 10menu1.add_command(label="menu-1-2") 11menu2 = tk.Menu(menubar, tearoff=False) 12menubar.add_cascade(label="menu-2", menu=menu2) 13menu2.add_command(label="menu-2-1") 14menu2.add_command(label="menu-2-2") 15root.config(menu=menubar) 16 17entry = tk.Entry(root) 18global x 19global y 20 21x=None 22y=None 23 24def call(e): 25 global x 26 global y 27 x=e.x 28 y=e.y 29 entry.place_forget() 30 entry.place(x=x, y=y) 31 32root.bind("<Button-1>",call) 33root.bind("<Button-3>",lambda e:entry.place_forget()) 34 35def rtn(e): 36 global x 37 global y 38 label = tk.Label(root, text=entry.get()) 39 entry.delete(0,"end") 40 entry.place_forget() 41 label.place(x=x,y=y) 42entry.bind("<Return>",rtn) 43 44menubar.bind("<Button>",lambda e:entry.place_forget())#機能しない 45 46root.mainloop() 47
試したこと
メニューバーにバインドしてみましたが機能しません。
menubar.bind("<Button>",lambda e:entry.place_forget())
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
今、どうなっていてどうしたいのでしょうか? 画像で説明いただくと分かりやすいかもしれません。
⇒ ラベルはそのままで、文字入力用のボックスは消したい、ということでしょうか?
回答2件
あなたの回答
tips
プレビュー