【发布时间】:2014-12-27 01:31:50
【问题描述】:
我正在尝试销毁我单击的在 for 循环中创建的按钮。尝试使按钮进入列表,然后使用列表删除,但我似乎无法使其工作。
代码如下:
root = Tk()
word_list = ["APPLE", "PEAR", "BANANA"]
word = word_list [random.randint(0,2)]
abc = '_ ' * len(word)
print (word)
lives = 0
guessed_letters = []
buttons = []
#Function
def click_1 (key):
buttons.append(key)
print (buttons)
if key in word:
guessed_letters.append(key)
abc = ''.join([key if key in guessed_letters else "_ " for key in word])
if abc == word:
letters_label.config(text="You win!")
raise SystemExit
letters_label.config(text=abc)
key_1 = buttons.index(key)
buttons[key_1].destroy(END)
else:
guessed_letters.append(key)
global lives
lives += 1
hangman_label.config(text=hangman_pics[lives])
if lives == 6:
letters_label.config(text="You lose...")
lives -= 1
raise SystemExit
#Frames
hangman_frame = Frame(root)
hangman_frame.grid(row=0, column=0, sticky=N)
letter_frame = Frame(root)
letter_frame.grid(row=1, column=0, sticky=S)
#Label
letters_label = Label(hangman_frame, text=abc)
letters_label.grid(row=0, column=0, sticky=W)
hangman_label = Label(hangman_frame, text=hangman_pics[lives])
hangman_label.grid(row=1, column=0, sticky=W)
#Buttons
r = c = 0
for letter in string.ascii_uppercase:
Button(letter_frame, text=letter, command=functools.partial(click_1, letter)).grid(row=r, column=c, sticky=W)
c += 1
if c > 12:
c = 0
r += 1
(抱歉阻塞,认为一切都是相关的)
谁能看出有什么不对?我尝试了很多不同的东西,但都不起作用。这段代码的具体错误信息是:
['A']
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/__init__.py", line 1475, in __call__
return self.func(*args)
File "/Users/alexeacott/Desktop/Hangman.py", line 85, in click_1
buttons[key_1].destroy(END)
AttributeError: 'str' object has no attribute 'destroy'
如果我改变 。破坏() 到 .grid.forget 错误说:
AttributeError: 'str object has no attribute 'grid'
我怎样才能不让它成为'str'?如何让我的代码正常工作?!
提前致谢。
编辑
根据建议:
#Buttons
r = c = 0
for letter in string.ascii_uppercase:
c += 1
my_button = Button(letter_frame, text=letter).grid(row=r, column=c, sticky=W)
my_button.configure(command=functools.partial(click_1, letter, my_button)
if c > 12:
c = 0
r += 1
这表示该行的冒号上有语法错误:
if c > 12:
【问题讨论】:
-
my_button.configure(...(...)需要关闭)。因此在下一行检测到 SyntaxError。在下一行检测丢失更接近是典型的。
标签: python for-loop tkinter widget python-3.3