2015-11-18 4 views
0

(я использую Python 3.5.)
Я создал сетку 5x5 и хочу получить вход из определенной строки/colomn.
Я никогда раньше не использовал tkinter, и я новичок в программировании.Tkinter; получить вход от определенной строки/colomn

Я создал кнопку шоу, поэтому каждый раз, когда пользователь ее подталкивает, я хочу, чтобы ввод печатался. Проблема состоит в том, что из-за моих двух циклов он выводит только последний элемент 44, потому что это когда цикл закончен.
Как я могу получить ВСЕ вход без изменения циклов for?

sudoku = Tk() 

def show_entry_fields(): 
    print(name[r][i].get()) 


i = 0 
for i in range(0,5): 
    for r in range(0,5) 
     name[r][i] = Entry(sudoku) 
     name[r][i].grid(row=r,column=i) 

Button(sodoku, text='Quit', command=sodoku.quit).grid(row=5, column=1) 
Button(sodoku, text='Show', command=show_entry_fields).grid(row=5, column=2) 
sodoku.mainloop() 
+0

Это потому, что вы замените 'name' каждый цикл. Это не полный код, поэтому я не могу конкретно сказать вам, как решить эту проблему по-другому, но, возможно, сохранить эту переменную в 2D-списке или словаре. Например, 'my_data [i] [r] = Entry (sodoku)'. – Torxed

+0

Вот и все, что я написал до сих пор, потому что я просто ударяю о стену этим. Я попробовал ваше предложение (если это было так, как вы его заметили), но тогда в таблице не было ни строк, ни колимов. – Panda93

ответ

2

магазин переменной в 2D список или словарь


# dictionary style 
root = {0:Tk()} 
n = 5 
m = 5 
size = (n,m) 

for i in range(1,n+1): 
    for j in range(1,m+1): 
     root[i,j] = Entry(sudoku) 
     root[i,j].grid(row = i, column = j) 

Я привык использовать словарь для хранения tkObject * (рамка, сетки и т.д .. .)

Действительно, полезно, когда вы хотите получить все объекты или только корень или только первый уровень кадра.

В этом случае root [1, *] даст вам первую строку вашей сетки, когда root [0] является экземпляром Tk.


В самом деле, вы можете сделать это, как это тоже:

# list style 
root = Tk() 
grid = [[Entry(sudoku).grid(row=i,column=j) for i in range(5)] for j in range(5)] 

Я не проверял этот код. Так что будь осторожен.


Испытание это:

import tkinter as tk 
root = tk.Tk() 
grid = [[tk.Entry().grid(row=i,column=j) for i in range(5)] for j in range(5)] 
input() 
+0

Спасибо за ответ. Я пробовал это, но проблема в том, что он возвращает только «none», независимо от намерений строк/столбцов. – Panda93

Смежные вопросы