簡體   English   中英

調用某些定義后,Findall調用不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM