最初にコードの長さをお詫びしますが、すべてを表示したかったのです。
次のようなインターフェイスがあります。
3 番目のオプション メニューを「リスト」に変更すると、「n」値を持つオプションが追加されます (表示されていません)。次に、ユーザーが値を入力できる「n」列が必要です。
また、インターフェイスによって開かれたテキスト ファイルに応じて「n」個の行が存在する可能性があるという問題もあります。
したがって、4列を追加するだけでコードが示すように、「n」個の行と列を追加することが可能かどうか疑問に思っています(ボックスで同じ値を繰り返さないことが困難であり、「n」列が必要になるため)。行数は正常に読み取ることができますが、行数によってはこれらの値をすべて返すのに問題があります。これまでのところ、私は1行を行うことができます..
ありがとうございました!
def numberwritten(number):
fg = number.get()
print fg
numbers = [StringVar() for i in xrange(4) ] #Name available in global scope. Need to add other rows?
for i in numbers:
i.trace('w',lambda a,b,c,n=i: numberwritten(n) )
def ChoiceBox(choice):
co_ord = str(frame_table.grid_size())
col, rows = map(float, co_ord.strip('()').split(','))
rows = int(rows)
if choice == "Fixed":
empty1.destroy()
#choice_frame.grid_forget()
tkMessageBox.showinfo("Message", "No optimisation, value fixed.")
elif choice == "List":
column = 7
for i in xrange(4):
choice_title = Label(frame_table, text='Value %g'% float(i+1), bg='white', borderwidth=0, width=10)
choice_title.grid(row=1, column=column+i, sticky="nsew", padx=1, pady=1)
boxes=[]
for i in xrange(4):
for j in range(2, rows):
box=Entry(frame_table,bg='white',borderwidth=0,textvariable=numbers[i], width=10, justify="center") # Here I'm having problems with rows
box.grid(row=j,column=column+i, sticky='nsew', padx=1, pady=1)
boxes.append(box)
box1,box2,box3,box4=boxes
elif choice == "Interval" or "Optimisation":
for i in xrange(2):
choice_title1 = Label(frame_table, text='Min Value', bg='white', borderwidth=0)
choice_title1.grid(row=0, column=column, sticky="nsew", padx=1, pady=1)
choice_title2 = Label(frame_table, text='Max Value', bg='white', borderwidth=0)
choice_title2.grid(row=0, column=column+1, sticky="nsew", padx=1, pady=1)
boxes=[]
for i in xrange(2):
box=Entry(frame_table,bg='white',borderwidth=0,textvariable=numbers[i])
box.grid(row=rows+1,column=i, sticky='ew', padx=1, pady=1)
boxes.append(box)
box1,box2,box3,box4=boxes
更新: 私は少し進んで、クラス Window: の下にある ChoiceBox のセクションは ChoiceBox(self, choice) です。次のセクションでは、「n」個のボックスを受け入れるようにコメント行を変更する必要があります。
column = 7
for i in xrange(self.number_boxes):
choice_title = Label(self.frame_table, text='Value %g'% float(i+1), bg='white', borderwidth=0, width=10)
choice_title.grid(row=1, column=column+i, sticky="nsew", padx=1, pady=1)
boxes=[]
for i in xrange(self.number_boxes):
for j in range(2, rows):
box=Entry(self.frame_table,bg='white',borderwidth=0,textvariable=numbers[i], width=10, justify="center")
box.grid(row=j,column=column+i, sticky='nsew', padx=1, pady=1)
boxes.append(box)
#box1,box2,box3,box4=boxes
ただし、元の例のコードの最初の数行を含む numberwritten を使用して、できれば行ごとに値のリストを完全に抽出するという問題がまだあります。