etree findall在函数内部不工作

2024-04-23 20:49:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我很困惑。 我以前写过这段代码,并在其他地方使用过:

def testBut(p):
    print(root)
    for items in root.findall("a/item"):
        print(items.get("name"))

而且效果很好。在

但现在在我的新项目中,我有以下代码:

^{pr2}$

所以在国防部之外。它工作得很好,并且显示了a中的所有项目,在def中我只得到根目录(因为我打印了它)。有人能解释一下为什么吗?在

我很抱歉,如果这是一个转载或其他,但我只是找不到答案,尤其是考虑到它在不同的文件,但完全相同的设置。。在

编辑:完整(ish)代码。在

from tkinter import *
from xml.etree.ElementTree import ElementTree
from xml.etree.ElementTree import Element
import xml.etree.ElementTree as ET

tree = ET.parse("Alphabet.xml")
root = tree.getroot()

colour0 = "WHITE"
colour1 = "OLIVEDRAB1"
colour2 = "PALETURQUOISE1"
colour3 = "ROSYBROWN1"
font1 = "Arial, 24"
counterRow = 1
counterColumn = 0

for items in root.findall("a/item"):
    print(items.get("name"))

def testBut(p):
    print(root)
    for items in root.findall("a/item"):
        print("test")
        print(items.get("name"))

def setup():
    for letters in root:
        global counterRow
        global counterColumn

        letters.tag = Button(vindue, text=letters.tag, font=font1,
                             command=lambda p=letters.tag: testBut(p))\
            .grid(row=counterRow, column=counterColumn, sticky="nsew")
        counterColumn += 1
        if counterColumn > 7:
            counterRow += 1
            counterColumn = 0


def reset():
    for buttons in vindue.grid_slaves():
        if buttons.grid_info()["row"] > 0:
            buttons.grid_forget()


def showBut(input):
    counter = 0
    reset()
    lst = []
    print(input)
    str = input+"/item"
    print(str)
    for items in root.findall("a/item"):
        print(items.get("name"))
        print("test")
        varstr = items.get("name")+"Var"
        varstr = IntVar()
        varstr2 = items.get("name")
        varstr2 = Button(vindue, text=items.get("name"), font="Arial, 44", command=lambda varstr=varstr: (varstr.set(varstr.get() + 1), print(varstr.get())))
        varstr2.grid(row=1, column=counter)
        counter += 1




vindue = Tk()

setup()

vindue.mainloop()

Tags: nameinimportforgetdefitemsroot