【问题标题】:Tkinter; get input from certain row/colomn特金特;从特定行/列获取输入
【发布时间】:2015-11-18 11:25:52
【问题描述】:

(我使用的是 Python 3.5。)
我创建了一个 5x5 网格,并希望从某个行/列获取输入。
我以前从未使用过 tkinter,而且我是编程新手。

我创建了显示按钮,所以每次用户按下它时,我都希望打印输入。问题是,由于我的两个 for 循环,它只打印出最后一个元素 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()

【问题讨论】:

  • 这是因为您在每个循环中都替换了name。这不是完整的代码,所以我不能具体告诉你如何以不同的方式解决这个问题,但也许将变量存储在 2D 列表或字典中。例如my_data[i][r] = Entry(sodoku)
  • 这就是我到目前为止所写的全部内容,因为我只是碰壁了。我尝试了您的建议(如果是您的建议),但表格没有任何行或列。

标签: python input tkinter


【解决方案1】:

将变量存储在二维列表或字典中


# 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* (Frame, Grid, etc ...)

确实,当您想获取所有对象或仅获取根或仅第一级 Frame 时,它​​很有用。

在这种情况下,当 root[0] 是 Tk 实例时,root[1,*] 将为您提供网格的第一行。


其实你也可以这样做:

 # 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()

【讨论】:

  • 感谢您的回答。我试过了,但问题是,它只返回“无”,与行/列的意图无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
相关资源
最近更新 更多