【问题标题】:Separating list items into columns with single label call使用单个标签调用将列表项分成列
【发布时间】:2014-02-06 00:20:41
【问题描述】:

我需要将列表项分成列。唯一的问题是我不知道创建列表时列表中有多少项目(我正在使用 nltk 的标记器制作列表)。我如何将第 1 列中的第 1 项,第 2 列中的第 2 项等。我在下面输入了我的简化代码。现在将内容放入正确数量的列中,但仅在每列中的列表中的最后一项。谢谢。

from Tkinter import * 
import ttk

root = Tk()
root.title("This space intentionally left blank")
root.minsize(800,200)
mainframe = ttk.Frame(root) 
mainframe.grid(column = 0, row = 0)

tokens = [0,1,2,3,4,5,6]
numtok = len(tokens)
tok = StringVar()
x=0
while x < numtok:
    tok.set(tokens[x])
    ttk.Label(mainframe, textvariable=tok).grid(column=x+1, row=2)
    x += 1

root.mainloop()

【问题讨论】:

  • 可能与任何主要问题无关,但您是否有意将row=2 硬编码?
  • @summea。是的。这是完整事物的遗物。我已经有了想要排在第 1 行的东西。不过,出于这些目的,这并不重要。
  • 你的代码有什么问题?它不工作吗?
  • @user1462309 它实际上并没有创建正确的列数,但列表中的最后一项在所有列中。我需要第 1 列中的第 1 项、第 2 列中的第 2 项等。现在我在第 1 列中获得第 6 项、第 2 列中的第 6 项等。

标签: python python-2.7 tkinter


【解决方案1】:

如果底层StringVar 发生变化,带有textvariable 集的Tkinter Labels 将始终更新其文本。

您正在创建一个 StringVar,每个循环都会更新该 StringVar,从而导致所有标签具有相同的文本。

试试这个:

from Tkinter import * 
import ttk

root = Tk()
root.title("This space intentionally left blank")
root.minsize(800,200)
mainframe = ttk.Frame(root) 
mainframe.grid(column = 0, row = 0)

tokens = [0,1,2,3,4,5,6]
tok_vars = []
for token in tokens:
    var = StringVar()
    var.set(token)
    tok_vars.append(var)

for ii,var in enumerate(tok_vars):
    ttk.Label(mainframe, textvariable=tok_vars[x]).grid(column=ii+1, row=2)

root.mainloop()

基本上只是给每个StringVar一个不同的Label

【讨论】:

  • 喜欢这个概念,但是代码会抛出以下错误: Traceback (most recent call last): File "C:/Python27/Untitled.py", line 12, in tok_vars = [ StringVar(str(i)) for i in tokens] 文件“C:\Python27\lib\lib-tk\Tkinter.py”,第 287 行,在 init 变量.__init__(self, master,值,名称)文件“C:\Python27\lib\lib-tk\Tkinter.py”,第 218 行,在 init self._tk = master.tk AttributeError: 'str' object has no attribute 'tk' 有什么修复建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多