我想从屏幕上删除某些标签。问题是我不知道如何单独访问每个标签。我使用相同的变量tile_frame_column
创建了每个标签,
假设我的屏幕上显示以下字母:'a''r''p'''d''''j':我想删除'r''e''d'但是每个字母都创建了按tile_frame_column
我尝试使用tile_frame_column.place_forget()
,但它只删除了创建的最后一个字母 - 'j'。如何访问这些相关标签?
以下代码:
def add_letter():
global tile_frame_column
global list_to_string
global i
global j
if not tiles_letter:
return
rand = random.choice(tiles_letter)
tile_frame_column = Label(root, text=rand) # each letter is created from tile_frame_column
tile_frame_column.place(x=i, y=j) # I place random letters on the screen
tiles_letter.remove(rand) # remove that tile from list of tiles
i+=20
if (len(tiles_make_word) % 12 == 0) & (len(tiles_make_word) > 0):
i=35
j+=20
tile_frame_column.place(x=i, y=j)
i+=20
tiles_make_word.append(rand)
list_to_string = ''.join(tiles_make_word) # converts each letter in list to a string
root.after(1000, add_letter)
root.after(1000, add_letter)
答案 0 :(得分:1)
除了建议的答案之外,我建议使用字典而不是列表。这使您可以选择为标签指定密钥,这样可以更轻松地找到要删除的标签。这是一个例子:
这将生成具有随机字符的标签,并将标签放在作为字符的键下的self.dict
下。这样,当您知道它包含的字符时,您可以轻松删除标签。在此示例中,您可以在条目中输入要删除的标签的字符,并删除该标签。
请注意,当您有两个相同的字母时,您必须考虑如何使用它,因为当您尝试在同一个键下放入时,第二个标签将替换字典中的第一个。您可以使用if letter in self.dict.keys():
import Tkinter as tk
import random
import string
class App():
def __init__(self):
self.root = tk.Tk()
self.dict={}
button1 = tk.Button(self.root, text='print dict', command=self.print_dict)
button1.pack()
button2 = tk.Button(self.root, text='insert label', command=self.insert_label)
button2.pack()
self.var = tk.StringVar()
entry = tk.Entry(self.root, textvariable=self.var)
entry.pack()
button3 = tk.Button(self.root, text='delete label', command=self.delete_label)
button3.pack()
self.root.mainloop()
def insert_label(self):
letter = random.choice(string.letters)
# you could put something like
# if not letter in self.dict.keys():
# here to prevent making two of the same labels
self.dict[letter] = tk.Label(self.root, text=letter)
self.dict[letter].pack()
def print_dict(self):
print self.dict
def delete_label(self):
letter = self.var.get()
try:
self.dict[letter].pack_forget()
del self.dict[letter]
self.var.set('')
except:
self.var.set('Label unknown')
App()
答案 1 :(得分:-1)
您可以创建另一个变量num_labels
来计算所做标签的数量,然后在标签变量名称中使用该变量,例如。
global num_labels
num_labels = 0
def add_letter():
global num_labels
num_labels += 1
tiles_frame_column = [1, 2, 3, 4, 5, 6, 7, 8, 9] # etc. however many numbers you have.
tiles_frame_column[num_labels] = Label(root, text=rand)
# and carry on with rest of code
然后你必须测试每个标签号码,看看你想要删除一些字母时的字母。