1

为什么这段代码不起作用

objects=[
    ('o','label', 0, 1),
    ('g','label', 0, 2),
    ('e','label', 0, 3),
    ('r','label', 1, 0),
    ('w','label', 2, 0),
    ('x','label', 3, 0),
]

for thing in objects:
    name = thing[0]
    type = thing[1]
    name = tk.type()

我正在尝试使用列表来定义我的 tkinter 小部件,以保持代码整洁。第一项是名称,然后是类型。我不断收到此错误。

module has no attribute type

我知道我做错了什么我只是不知道如何解决它。如何使用存储在变量中的值来创建小部件?

所以我想name = tk.type()被解释为o = tk.label()

谢谢你的帮助。

4

3 回答 3

2

它不起作用,因为列表中的第二列包含字符串,而不是类。也许您应该将实际类存储在对象列表中:

import Tkinter as tk
...
objects=[
    ('o',tk.Label, 0, 1),
    ('g',tk.Label, 0, 2),
    ('e',tk.Label, 0, 3),
    ('r',tk.Label, 1, 0),
    ('w',tk.Label, 2, 0),
    ('x',tk.Label, 3, 0),
]
于 2013-08-12T03:25:42.930 回答
0

Tkinter 的标签小部件用大写“L”拼写,所以你需要

objects=[
    ('o','Label', 0, 1),
    ('g','Label', 0, 2),
    ('e','Label', 0, 3),
    ('r','Label', 1, 0),
    ('w','Label', 2, 0),
    ('x','Label', 3, 0),
]
于 2013-08-12T00:17:48.107 回答
0

使用getattr().

name = getattr(tk, type)

Nowname是一个函数,因此您可以使用函数语法 ( name())调用它

于 2013-08-12T00:12:50.573 回答