在python中用新标签替换Label

时间:2017-12-11 16:15:25

标签: python tkinter

所以我知道标题有点令人困惑,但我不知道如何以更好的方式表达我的问题,而且我也是python的新手。

好的,这就是我的问题:我有这个程序,当你点击一个按钮然后显示那个数字时会生成一个随机数,但是每次你点击它时会显示前一个下面的新权利,所以我想要这个数字只是改变而不是出现在前一个下面,这是我的代码:

(截图:https://gyazo.com/2bc9ae7bbe32c2422c94891ca30b8512 Python 3.0)

from tkinter import *
import random

screen = Tk()

def generate():
        random_number = random.randint(1, 1000)
        result = Label(screen, text="Number: " + str(random_number))
        result.pack(side=TOP)

text = Label(screen, text="Click to generate a random number:")
text.pack(side=TOP)

button = Button(screen, text="GENERATE!", command=generate, fg="yellow",                 
bg="purple")
button.pack(side=TOP)

screen.mainloop()

2 个答案:

答案 0 :(得分:3)

变化:

def generate():
        random_number = random.randint(1, 1000)
        result = Label(screen, text="Number: " + str(random_number))
        result.pack(side=TOP)

使用:

result = Label(screen)
result.pack(side=TOP)
def generate():
        random_number = random.randint(1, 1000)
        result['text'] = "Number: " + str(random_number)

每次调用Label时,前代码都会创建一个 new generate对象,这会占用内存;而后者仅创建Label个对象一次,并且每次调用text时只修改其generate选项。

修改:与Farhan K.的评论同时添加了更多解释。

答案 1 :(得分:0)

使用place代替pack使用包告诉标签小部件显示前一个结果,但place将通过重叠前一个显示在确切位置。

from tkinter import *
import random

screen = Tk()

def generate():
        random_number = random.randint(1, 1000)
        result = Label(screen, text="Number: " + str(random_number))

        result.place(x=650, y=100)

text = Label(screen, text="Click to generate a random number:")
text.pack(side=TOP)

button = Button(screen, text="GENERATE!", command=generate, fg="yellow",
bg="purple")
button.pack(side=TOP)

screen.mainloop()