Tkinterで時間入力やテンキーなどの専用入力画面を出したいです。
例えば下のコードで、
Treeviewの中から時間をダブルクリックすると
その時間を変更できるようにしたいです。
ダブルクリックしたときに添付画像のように、
該当データのすぐ下に表示したいのですが、
Treeviewや他のウィジェットが既に表示したいエリアへ配置済みの場合は
Toplevel()を使う以外ないでしょうか?
フレームの場合はあらかじめ、フレームを配置しておく必要ありますか?
また、画像のようにウィンドウからはみ出す可能性もありますが、
フレームの場合はこういうことは当然できないでしょうか?
Python
import tkinter as tk from tkinter import ttk def on_tree(e): tree = e.widget selected = tree.selection() clickarea = tree.identify_region(e.x, e.y) if len(selected) == 1 and clickarea == "cell": # 列の取得 x = tree.winfo_pointerx() - tree.winfo_rootx() select_column_str = tree.identify_column(x) select_column_int = int(select_column_str[1:]) # 時刻列ダブルクリックで専用入力画面出したい if select_column_int == 2: timestr = tree.item(selected[0])["values"][select_column_int - 1] print(timestr) root = tk.Tk() tree = ttk.Treeview(root, selectmode="browse") tree.pack() # headings columns = 2 tree["columns"] = tuple(range(columns)) tree["show"] = "headings" tree.heading(0, text="No.") tree.heading(1, text="Time[hh:mm]") # data tree.insert("", "end", values=("1", "00:00")) tree.insert("", "end", values=("2", "01:11")) tree.insert("", "end", values=("3", "02:22")) tree.insert("", "end", values=("4", "03:33")) tree.insert("", "end", values=("5", "04:44")) tree.bind("<Double-Button-1>", on_tree) root.mainloop()
まだ回答がついていません
会員登録して回答してみよう