Tkinterでの現在アクティブなEntryの取得
初めまして。Python初心者で勉強中です。
現在色々なサイトを参考にてTkinterを使用して表形式の入力アプリを作成中です。
2列目にEntryでテキストボックスを作成し、アクティブなテキストボックス内でエンターが押されると
次の行が追加されるようにしたいと考えています。
その際、アクティブな行は新しく追加された行にもっていきたいと思っています。
現況のプログラムではバインドを使用してエンターを取得することはできたのですが、
常に2行目のEntryでエンターが押されない限り行の追加ができない状態となっております。
どのような方法を取ればアクティブなEntryが取得できるのかをご教示いただけますと幸いです。
該当のソースコード
python3
1import tkinter as tk 2from tkinter import ttk 3from tkinter import filedialog 4import pandas as pd 5from tkinter import * 6 7#入力用のGUI 8def GUI_Input(n): 9 root = tk.Tk() 10 root.title('Table Input') 11 12 #入力用フレーム 13 frame0 = ttk.Frame(root) 14 frame0.grid(row=0, column=0) 15 16 #項目をつくる 17 list_Labels = ['a', 'b', 'c','d','e','f','g','h','i','j'] 18 for i in range(0, len(list_Labels)): 19 label0 = ttk.Label(frame0, 20 text=list_Labels[i]) 21 label0.grid(row=0, column=i) 22 23 24 #項目1 25 for i in range(0, n): 26 label0 = ttk.Label(frame0, 27 text=i+1) 28 label0.grid(row=i+1, column=0) 29 #項目2 30 list_Items1 = [0] * n 31 for i in range(0, n): 32 list_Items1[i] = tk.StringVar() 33 entry_Item1 = ttk.Entry(frame0, 34 textvariable=list_Items1[i], 35 width=10) 36 entry_Item1.focus_set() 37 entry_Item1.grid(row=i+1,column=1) 38 #項目3 39 list_Items2 = [0] * n 40 for i in range(0, n): 41 list_Items2[i] = ttk.Combobox(frame0, 42 state='readonly', 43 width=10) 44 list_Items2[i]['values'] = ('a', 'b', 'c', 'd', 'e', 'f') 45 list_Items2[i].grid(row=i+1, column=2) 46 #項目4 47 list_Items3 = [0] * n 48 for i in range(0, n): 49 list_Items3[i] = tk.StringVar() 50 entry_Item3 = ttk.Entry(frame0, 51 textvariable=list_Items3[i], 52 width=10) 53 entry_Item3.grid(row=i+1,column=3) 54 #項目5 55 for i in range(0, n): 56 label1 = ttk.Label(frame0, 57 text=i+1,width=10,anchor='c') 58 label1.grid(row=i+1, column=4) 59 #項目6 60 for i in range(0, n): 61 label2 = ttk.Label(frame0, 62 text=i+1,width=10,anchor='c') 63 label2.grid(row=i+1, column=5) 64 #項目7 65 for i in range(0, n): 66 label3 = ttk.Label(frame0, 67 text=i+1,width=10,anchor='c') 68 label3.grid(row=i+1, column=6) 69 #項目8 70 for i in range(0, n): 71 label4 = ttk.Label(frame0, 72 text=i+1,width=10,anchor='c') 73 label4.grid(row=i+1, column=7) 74 #項目9 75 for i in range(0, n): 76 label5 = ttk.Label(frame0, 77 text=i+1,width=10,anchor='c') 78 label5.grid(row=i+1, column=8) 79 #項目10 80 for i in range(0, n): 81 label6 = ttk.Label(frame0, 82 text=i+1,width=10,anchor='c') 83 label6.grid(row=i+1, column=9) 84 y = 0 85 x = 2 86 print(x) 87 print(y) 88 def addText(event): 89 l1['text'] = int(l1['text']) + 1 90 t = int(l1['text']) 91 print(t) 92 for i in range(0, t): 93 label0 = ttk.Label(frame0,text=i+1) 94 label0.grid(row=i+1, column=0) 95 e = entry_Item1 96 e.bind("<Return>",addText) 97 l1 = ttk.Label(frame0,text=1) 98 root.mainloop() 99 100#nの数を変えて、初期の表の行数を変える 101n = 2 102GUI_Input(n)
試したこと
e = entry_Item1をアクティブな(現在カーソルがある位置)Entryに指定したいです。
eにどんな内容が入っているのか確認のためPrint(e)を実行すると
.!frame.!entry2
が入っていることがわかりました。
これをentry1にすればいけるのかとも思ったのですが、うまくいきません・・・
いくら調べても全然方法がわからず、もし不可であれば根本から変更することも考えております。
お力添えよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/02 13:18