Tkinterで時間入力やテンキーなどの専用入力画面を出したいです。
例えば下のコードで、
Treeviewの中から時間をダブルクリックすると
その時間を変更できるようにしたいです。
ダブルクリックしたときに添付画像のように、
該当データのすぐ下に表示したいのですが、
Treeviewや他のウィジェットが既に表示したいエリアへ配置済みの場合は
Toplevel()を使う以外ないでしょうか?
フレームの場合はあらかじめ、フレームを配置しておく必要ありますか?
また、画像のようにウィンドウからはみ出す可能性もありますが、
フレームの場合はこういうことは当然できないでしょうか?
Python
1import tkinter as tk 2from tkinter import ttk 3 4def on_tree(e): 5 tree = e.widget 6 selected = tree.selection() 7 clickarea = tree.identify_region(e.x, e.y) 8 9 if len(selected) == 1 and clickarea == "cell": 10 # 列の取得 11 x = tree.winfo_pointerx() - tree.winfo_rootx() 12 select_column_str = tree.identify_column(x) 13 select_column_int = int(select_column_str[1:]) 14 15 # 時刻列ダブルクリックで専用入力画面出したい 16 if select_column_int == 2: 17 timestr = tree.item(selected[0])["values"][select_column_int - 1] 18 print(timestr) 19 20 21root = tk.Tk() 22 23tree = ttk.Treeview(root, selectmode="browse") 24tree.pack() 25 26# headings 27columns = 2 28tree["columns"] = tuple(range(columns)) 29tree["show"] = "headings" 30tree.heading(0, text="No.") 31tree.heading(1, text="Time[hh:mm]") 32 33# data 34tree.insert("", "end", values=("1", "00:00")) 35tree.insert("", "end", values=("2", "01:11")) 36tree.insert("", "end", values=("3", "02:22")) 37tree.insert("", "end", values=("4", "03:33")) 38tree.insert("", "end", values=("5", "04:44")) 39 40tree.bind("<Double-Button-1>", on_tree) 41 42root.mainloop()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/04/08 00:50 編集
2022/04/08 01:05
2022/04/08 02:35 編集
2022/04/08 03:59
2022/04/08 05:46
2022/04/08 06:18
2022/04/08 07:01 編集
2022/04/08 14:41 編集