我在堆栈溢出时讨论了这些主题,但无法理解任何内容。 (是的,我已经看到答案已经回答,但实在无法理解。)
所以,这就是事情。 我正在建立一个小型应用程序,将一对一对的夫妇配对我们正在进行的锦标赛。我成功构建了与玩家配对的算法,我决定让每个人都更加平易近人,并开始关注ktinker。
我设法让我的应用程序显示如下内容:
Title
info
info
info
info
info
Button
按钮假设重新运行整个事情(下一轮)并且它有效。我已经设法用适当的标题获得它,甚至在屏幕的末尾添加了一个新按钮。我遇到的唯一问题是我想摆脱上面的所有文字。摧毁它,然后在新页面上绘制。
现在,代码:
from tkinter import *
root = Tk()
root.title("Tournament")
root.geomerty("50x180")
app = Frame(root)
app.grid()
run_application() # my pairings
#inside the code i'm pairing the players and then:
for players in player_paired:
label=Label(app, text=players[0]+' vs. '+players[1] # its a tuple
label.grid()
button=Button(app,text="Next Round", command=run_application)
button.grid()
#end of run_application
root.mainloop()
所以,我尝试在“run_application”的开头添加下一行:
app.destroy()
app = Frame(root)
app.grid()
并在分配前引用了“UnboundLocalError:局部变量'app'”
有人会帮忙吗?我无法弄清楚这一点。 (如果能够写出示例,那将会有很大帮助)
地平线。
答案 0 :(得分:1)
最简单的解决方案是将您想要销毁的所有内容放在一个框架中,然后您可以简单地销毁并重新创建框架,或者销毁框架中的所有子项。
在您的特定情况下,将button
的父级设为root
,然后每次按下按钮时都可以销毁并重新创建app
的内容。
这是一个例子。我冒昧地改变你导入的方式,符合PEP8标准:
import tkinter as tk
from random import shuffle
participants = [
"Fred Flintstone", "Barney Rubble", "Wilma Flintstone", "Betty Rubble"
]
def get_pairings():
'''for simulation purposes, this simply randomizes the participants'''
global participants
# see http://stackoverflow.com/a/23286332/7432
shuffle(participants)
return zip(*[iter(participants)]*2)
def reset():
'''Reset the list of participants'''
for child in app.winfo_children():
child.destroy()
for players in get_pairings():
label = tk.Label(app, text="%s vs. %s" % players)
label.grid()
root = tk.Tk()
root.title("Tournament")
app = tk.Frame(root)
app.grid()
button=tk.Button(root,text="Next Round", command=reset)
button.grid()
# this sets up the first round
reset()
root.mainloop()
答案 1 :(得分:0)
根据我的经验,我发现删除元素更容易。这是你可以做的事情。我真的没有太多时间,所以我将使用代码中的示例,而不是编辑代码。
因此,对于您的标签,您可以这样做。
{'event':'productClick', 'userId': null,
'portalId': null,
'cookieId': null,
'customerId': null,
'customerType': null,
'sessionId': null,
'displayMode': null,
'userAgent': null,
'language_Iso639_1Code': null,
'userAgentIsMobile': null,
'user': null,
'ecommerce': {
'click': {
'actionField': {
'list': 'Produktdetails Varianten',
'id': null
},
'products': [
{
'id': '5714877',
'name': 'G-Series G610 Orion Brown',
'price': '139.0000',
'brand': 'Logitech',
'category': 'Tastatur',
'variant': 'USB, CH, Kabel, MX-Brown',
'gx_nameWithBrand': 'Logitech G-Series G610 Orion Brown',
'gx_brandId': 292,
'gx_productTypeId': 55,
'gx_priceExcl': 'CHF 128.70',
'gx_isSalesPromotion': false,
'gx_isShownInShowRoom': false,
'gx_rating': 4.5,
'gx_productGroup1': 389,
'gx_productGroup2': 254
}
]
}
}}
然后删除文本有一个方法可以做这样的事情。
labels = []
for players in player_paired:
label=Label(app, text=players[0]+' vs. '+players[1] # its a tuple
label.grid()
labels.append(label)
然后在那之后回到起点。