我无法让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()函数。打印。