【问题标题】:How can i erase contents in a Label?如何擦除标签中的内容?
【发布时间】:2016-12-08 05:49:51
【问题描述】:

对不起

所以我正在制作一个座位表,但我似乎无法让它正常工作......再次。每次按下运行按钮时,我都会尝试重置标签,有什么想法吗?

#commands: add name , Run

#imports
import random
from time import sleep
from tkinter import *

#Console and background Handlers
Tables = 6
Names = []

def AddNames():
    NewNames = e.get("1.0", 'end -1c')
    if NewNames in Names:
        print("Name Already exists")
    elif NewNames == "":
        print("Empty")
    else:
        Names.append(NewNames)
    print(Names)
    e.delete(1.0, END)

def Random():
    RandomNum = random.randrange(Tables)
    if RandomNum == 0:
        RandomNum = random.randrange(Tables)
    return RandomNum

def run():
    X = 0
    for i in Names:
        #print(Names[X])
        print("Table: " + str(Random()))
        X += 1
#text = Label(popup, text = "")
        text = Label(popup, text=  Names[X] + "\n" + "Table: " +     str(Random()))
        text.pack()

#GUI Handler
root = Tk()
root.geometry("1024x768")

e = Text(root, bd = 10, font=("Comic Sans MS", 50) ,width = 15, height = 2)
e.pack()

popup = Toplevel()
popup.title("Seating Chart")

AddNameButton = Button(root, text = ("Add Name"), width = 15, height = 5,     command = AddNames)
AddNameButton.pack()

RunButton = Button(root, text = ("Run"), width = 15, height = 5, command = run)
RunButton.pack()



root.mainloop()

每次用户按下运行按钮时,我都会尝试重置文本

【问题讨论】:

  • 你想让运行函数只擦除内容还是做其他事情?
  • 运行函数类型为不同的名称分配一个数字。
  • 你已经在AddNames()方法中做到了。

标签: python python-3.x user-interface tkinter labels


【解决方案1】:
import tkinter
from tkinter import ttk

import random

class MyApp:
    def __init__(self):
        self.root = tkinter.Tk()
        self.seatwindow = None

        self.root.title('Add Names')

        self.currentname = tkinter.StringVar()
        self._maxtables = tkinter.StringVar()
        self.addednames = []

        self.commandframe = ttk.Labelframe(self.root, text='Commands')

        self.nameentry = ttk.Entry(self.root, textvariable=self.currentname)
        self.addbutton = ttk.Button(self.root, text='Add Name', command=self.addname)
        self.maxtablabel = ttk.Label(self.root, text='Tables: ')
        self.maxtabentry = ttk.Entry(self.root, textvariable=self._maxtables)

        self.genbutton = ttk.Button(self.commandframe, text='Run', command=self.generate)
        self.resetbutton = ttk.Button(self.commandframe, text='Reset', command=self.reset)

        self._maxtables.set('6')

        self.nameentry.grid(row=0, column=0)
        self.addbutton.grid(row=0, column=1, sticky='nsew')
        self.maxtabentry.grid(row=1, column=1, sticky='nsw')
        self.maxtablabel.grid(row=1, column=0, sticky='nse')

        self.genbutton.grid(row=0, column=0, sticky='nsew')
        self.resetbutton.grid(row=0, column=1, sticky='nsew')

        self.commandframe.grid(row=2, column=0, columnspan=2, sticky='nsew')

        self.nameentry.bind('<Return>', self.addname)
        self.root.bind('<Control-Return>', self.generate)

    def addname(self, event=None):
        name = self.currentname.get()
        if not(name == '' or name in self.addednames):
            self.addednames.append(name)
            self.currentname.set('')
        else:
            self.currentname.set('Name already added!')

    def generate(self, event=None):
        if not self.seatwindow == None:
            self.seatwindow.destroy()
        self.currentname.set('')
        self.seatwindow = tkinter.Toplevel()

        random.shuffle(self.addednames)
        tables = []
        for i in range(self.maxtables):
            tableframe = ttk.Labelframe(self.seatwindow, text='Table ' + str(i + 1) + ':')
            tableframe.grid(column=i, row=0, sticky='nsew')
            tables.append(tableframe)
        for index, name in enumerate(self.addednames):
            namelabel = ttk.Label(tables[index%self.maxtables], text=name)
            namelabel.grid(column=0, row=index//self.maxtables + 1)

    def reset(self):
        self.currentname.set('')
        self.maxtables = 6
        self.addednames = []

    def run(self):
        self.root.mainloop()

    @property
    def maxtables(self):
        return int(self._maxtables.get())

MyApp().run()

【讨论】:

  • 它不是我要清除的文本,它是标签(称为文本)。 e.delete(1.0, END) 仅清除用户输入名称的文本。也许如果你在你的电脑上运行它(f 可用)你会看到,我的代码非常混乱 XD。
  • 也许我可以创建一个新的重置按钮来重置文本,但我不知道在函数中添加什么
  • 放一些更简洁的代码,如果这有助于让我知道,否则我可以仅使用您的代码解决问题。
  • 是的,它奏效了。你刚刚输入了这个!?如果是这样,那就太棒了!!!我会看看这个并有点处理它。我对 tkinter 有点陌生,对 python 的经验也很少,请解释一下。
  • 我只是输入了它。 :D 但是,我也已经用 python 编程了 5 年多。如果您有任何问题,请告诉我。我的代码中的一些元素是 python 的相当高级的特性,但我会尽量说明它的作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-03
  • 2014-08-27
相关资源
最近更新 更多