所以,这是我关于这个主题的3.帖子,对不起,但我变得越来越聪明了:
所以,完整的代码: 我有一个xml文档,如下所示:
<list>
<a>
<item name="Apple" kcal="36" />
<item name="Apricot" kcal="78" />
</a>
<b>
<item name="Banana" kcal="53" />
<item name="Bnoodles" kcal="87" />
</b>
</list>
我的python代码如下所示:
from tkinter import *
import xml.etree.ElementTree as ET
tree = ET.parse("Alphabet.xml")
root = tree.getroot()
font1 = "Arial, 24"
counterRow = 1
counterColumn = 0
def test():
print("PRINTOUT")
for items in root.findall("a/item"):
print(items.get("name"))
def setup():
for letters in root:
global counterRow
global counterColumn
letters.tag = Button(vindue, text=letters.tag, font=font1, command=test)\
.grid(row=counterRow, column=counterColumn, sticky="nsew")
counterColumn += 1
if counterColumn > 7:
counterRow += 1
counterColumn = 0
vindue = Tk()
# setup()
button1 = Button(vindue, text="test", command=setup).grid(row=5)
button2 = Button(vindue, text="test", command=test).grid(row=6)
vindue.mainloop()
正确如此场景如下: 当我运行脚本并且我先按下button2时,我得到这样的打印:
PRINTOUT
Apple
Apricot
如果我按下Button1并获得“A”和“B”按钮,然后按下其中任何一个,我只能得到:
PRINTOUT
如果我按下Button1并获得“A”和“B”按钮 - 但是然后按下Button2然后我得到:
PRINTOUT
我不明白出了什么问题?
编辑:解决方案: 所以你不能直接使用letters.tag,但是如果你把它分配给某种类型的持有者,那就可以了。
def setup():
for letters in root:
global counterRow
global counterColumn
str = letters.tag
str = Button(vindue, text=letters.tag, font=font1, command=test)\
.grid(row=counterRow, column=counterColumn, sticky="nsew")
counterColumn += 1
if counterColumn > 7:
counterRow += 1
counterColumn = 0
答案 0 :(得分:0)
问题是在循环中你改变了每个顶级元素的标记。您似乎正在指定Tk Button
作为标记,但实际上对标记的任何更改都会显示相似的结果。
>>> import xml.etree.ElementTree as ET
>>> tree = ET.parse("Alphabet.xml")
>>> root = tree.getroot()
>>> list(root.findall("a/item"))
[<Element 'item' at 0x7fbbd755e1d0>, <Element 'item' at 0x7fbbd755e290>]
>>> for letters in root:
... print letters
...
<Element 'a' at 0x7fbbd755e190>
<Element 'b' at 0x7fbbd755e350>
>>> for letters in root:
... letters.tag = 'foo'
...
>>> for letters in root:
... print letters
...
<Element 'foo' at 0x7fbbd755e190>
<Element 'foo' at 0x7fbbd755e350>
>>> list(root.findall("a/item"))
[]
>>>
我不知道您希望分配给tag
中每个XML元素的root
,但这就是您运行后没有a
个标签的原因setup()