[英]Findall call not working when certain def has been called
所以,這是我關於這個主題的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
我不明白怎么了?
編輯:解決方案:因此,您不能直接使用letter.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
問題在於,在循環中您更改了每個頂級元素的標簽。 您似乎正在將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
,但是這就是為什么你dn't有任何a
在運行后的標簽setup()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.