winfo_exists()没有看到现有的标签

时间:2019-08-23 18:31:27

标签: python tkinter

我无法让Label.winfo_exists()看到之前打印的标签。

我有一个带有多个按钮的窗口,这些按钮都将数据传递给该例程。在第一遍中,这将在“ A行”上打印标签。如果按下了另一个按钮(包括第一个按钮),该例程将再次运行,再次在“ A”行上打印同一组标签,同时从“ B”行上的第二个按钮打印数据。我试图删除所有以前放置的标签,然后放下另一层。实际上,我最多只能有“ L”行。

所以我运行例程。在第一遍中,我在开始时得到一个NameError(因为该标签还不存在)。创建标签后,我再次进行测试,并且winfo_exists()正确显示。

在第二遍,(我尝试了相同和不同的按钮),第一次检查再次从NameError显示0,应显示为1。第二次打印标签后,再次显示1,如果我尝试从另一个例程中删除,它会删除顶部的第二个例程,而不是原始标签。

此窗口还有很多其他数据,我不能只删除整个窗口。

rosterloops = len(final_roster)
print(f'Roster Loops {rosterloops}')                # Prints 1 on 1st run, 2 on 2nd
ex_test = IntVar()
if rosterloops >=1:
    try:
        ex_test = roster_unit.winfo_exists()
    except NameError:
        print('NameError')                          # Prints on both runs
        ex_test = 0
    except KeyError:
        print('Key Error')
        ex_test = 0
    print(f'BV Test 1 is {ex_test}')                # Prints "0" on both runs
    if ex_test == 1:
        print('Got here!')                          # Never gets here
        roster_del.destroy()
    data = final_roster.get(1)
    data_split = data.split("@")
    org = data_split[0]
    name = data_split[1]
    model = data_split[2]
    gunnery = int(data_split[7])
    pilot = int(data_split[8])
    num1 = int(bva)
    num2 = float(gpmatrix[gunnery][pilot])
    roster_adj_bv = round((num1 * num2))
    bv_array[1] = roster_adj_bv

    # Name/Model
    roster_unit = Label(root, text=f' {name} {model}')
    roster_unit.place(x=rosterx + 40, y=rostery, width=230)
    # Gunnery/Pilot
    roster_gun = Label(root, text=f'{gunnery}    /')
    roster_gun.place(x=rosterx + 270, y=rostery)
    roster_gplus = Button(root, image=pimg, width=20, height=15,
                                          command=lambda rl=1, x=rosterx, y=rostery: upg(root, rl, final_roster,
                                                                                          bv_array, x, y))

    try:
        ex_test = roster_unit.winfo_exists()
    except NameError:
        print('NameError')
        ex_test = 0
    except KeyError:
        print('Key Error')
        ex_test = 0
    print(f'BV Test 1a is {ex_test}')                # Prints "1" on both runs

我应该让第一个winfo_exists()在第一遍运行时显示为0,然后在第二遍显示1,以便程序可以转到“此处获得!”下的.destroy()函数。打印。

0 个答案:

没有答案