【问题标题】:Python tkinter create buttons with loop and edit their parametersPython tkinter 创建带有循环的按钮并编辑它们的参数
【发布时间】:2016-03-04 16:33:54
【问题描述】:

我正在使用 Tkinter 制作一个程序,我需要使用“for i in range”循环,以创建 81 个名为的文本小部件:

文本1 文本2 文本3 ...

并将它们放在一个正方形中(实际上是为 9*9 大小的数独游戏制作烤架)。创建这 81 个文本小部件后,我需要放置它们(使用 .place() )并输入它们的位置参数。 之后,我需要收集用户在这些文本小部件中输入的值。

我是新手,我真的不知道如何编写代码。 这是我的实际代码,但问题是一旦创建了字典,我就无法修改参数,而且我不知道如何访问 Text Widgets 参数。也许使用字典不是做我想做的事情的合适解决方案。

d = {}
Ypos = 100

for i in range(9):        
        Xpos = 100
    for j in range(9):            
        d["Text{0}".format(i)]= Text(window, height=1, width=1,relief = FLAT,font=("Calibri",16))
        d["Text{0}".format(i)].place(x = Xpos+,y = Ypos)
        Xpos += 35
    yPos += 35

感谢您的帮助

【问题讨论】:

  • 修改参数不是您的要求。你为什么要这么做?

标签: python loops tkinter


【解决方案1】:

不要对字典使用复杂的键,这会使代码更复杂而没有任何好处。

由于您要创建网格,因此请使用 rowcolumn 而不是 ij。这将使您的代码更容易理解。此外,如果您正在创建网格,请不要使用 place。 Tkinter 有一个专门用于创建网格的几何管理器。

由于您要创建一个行高为一行的文本小部件,因此使用条目小部件更有意义。

这是一个例子:

import Tkinter as tk

root  = tk.Tk()
d = {}

window = tk.Frame(root, borderwidth=2, relief="groove")
window.pack(fill="both", expand=True)

for row in range(9):
    for column in range(9):
        entry = tk.Entry(window, width=1, relief="flat", font=("Calibri",16))
        entry.grid(row=row, column=column, sticky="nsew")
        d[(row,column)] = entry

root.mainloop()

当您需要访问单元格中的数据时,您可以轻松地使用行和列:

value = d[(3,4)].get()
print("row 3, column 4 = %s" % value)

【讨论】:

  • 谢谢你,你的帮助对我很有帮助!
猜你喜欢
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 2021-07-05
  • 2018-05-29
  • 1970-01-01
相关资源
最近更新 更多