tkinter - python 3 - 清除屏幕

时间:2016-09-27 14:12:28

标签: python python-3.x tkinter

我在堆栈溢出时讨论了这些主题,但无法理解任何内容。 (是的,我已经看到答案已经回答,但实在无法理解。)

所以,这就是事情。 我正在建立一个小型应用程序,将一对一对的夫妇配对我们正在进行的锦标赛。我成功构建了与玩家配对的算法,我决定让每个人都更加平易近人,并开始关注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'”

有人会帮忙吗?我无法弄清楚这一点。 (如果能够写出示例,那将会有很大帮助)

地平线。

2 个答案:

答案 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)

然后在那之后回到起点。