在 Tkinter 中按下按钮后更新标签文本

问题描述 投票:0回答:6

我想知道如何在单击按钮后更改标签文本。例如:

from Tkinter import *
import tkMessageBox

def onclick():
    pass

root = Tk()

root.title("Pantai Hospital")

L1 = Label(root, text='Welcome to Pantai Hospital!')
L1.pack() 
L2 = Label(root, text='Login')
L2.pack() 

L3 = Label(root, text = "Username:")
L3.pack( side = LEFT, padx = 5, pady = 10)
username = StringVar()
E1 = Entry(root, textvariable = username, width = 40)
E1.pack ( side = LEFT)

L4 = Label(root, text = "Password:")
L4.pack( side = LEFT, padx = 5, pady = 10)
password = StringVar() 
E2 = Entry(root, textvariable = password, show = "*", width = 40)    
E2.pack( side = LEFT)'`

我想在单击按钮后将这些标签

username
password
以及输入字段更改为另一个不同的标签。我怎么做?

python user-interface tkinter
6个回答
13
投票

如何在按下按钮时执行任何操作”的答案应该在任何教程中。
例如在effbot书中:Button

使用

command=
为按钮指定功能名称。

(顺便说一句:函数名称(或回调)表示名称不带括号和参数)

btn = Button(root, text="OK", command=onclick)

如何更改标签文本”的答案也应该在任何教程中。

lbl = Label(root, text="Old text")

# change text

lbl.config(text="New text")

# or

lbl["text"] = "New text"

如果您想将

Entry
更改为
Label
,请删除/隐藏
Entry
(
widget.pack_forget()
) 或销毁它 (
widget.destroy()
) 并创建
Label

btw:您可以禁用

Entry
而不是创建
Label
(
ent.config(state='disabled')
)


编辑:我删除了

lbl.["text"]

中的点

3
投票

在编写button.pack()之后编写lbl.pack() 一小段代码,用于在单击按钮时显示值的变化。 这样做是为了在单击按钮后显示在标签中所做的更改。

    from tkinter import *

    root = Tk(className = "button_click_label")
    root.geometry("200x200")

    message = StringVar()
    message.set('hi')

    l1 = Label(root, text="hi")


    def press():
        l1.config(text="hello")

    b1 = Button(root, text = "clickhere", command = press).pack()

    l1.pack()

    root.mainloop()

我只是一个入门级Python程序员。 如果我错了,请原谅并纠正我! 干杯!


2
投票

动态更改标签的另一种方法。这里我们使用 lambda 来显示对标签显示的多项调整。如果您想更改一个标签,只需忽略 lambda 并调用不带参数的函数(在本例中为 1 和 2)。请记住在为此用途创建标签时确保分离 .pack 方法,否则当函数尝试使用 .pack 方法配置行时,您将收到错误。

from tkinter import *  

root = Tk(className = "button_click_label")  
root.geometry("200x200")
  
def press(x):  
    if x == 1:  
        l1.config(text='hello')    
    else:    
        l1.config(text='hi')  

b1 = Button(root, text = "click me", command = lambda:press(1)).pack()  
b2 = Button(root, text = 'click me', command = lambda:press(2)).pack()

l1 = Label(root, text="waiting for click")  
l1.pack()

root.mainloop()

1
投票

这是我创建一个带有标签的基本 GUI 的示例。然后我更改了标签文本。

import tkinter as tk
from tkinter import *
app = tk.Tk()
#creating a Label
label = Label(app,  text="unchanged")
label.pack()
#updating text 
label.config(text="changed")
app.mainloop()

0
投票

这应该有效:

from tkinter import *

root = Tk(className = "button_click_label")
root.geometry("200x200")

message = StringVar()
message.set('hi')

l1 = Label(root, text="hi")
l1.pack()

def press():
    l1.config(text="hello")

b1 = Button(root, text = "clickhere", command = press).pack()

root.mainloop()

0
投票

这是一个简单的骰子滚轮。 在 on_click 函数中,您将看到 label5 文本正在更改为掷骰子的内容,您可以多次单击该按钮,并使标签每次都发生更改。我知道这个问题已经被回答过多次,但没有人建议 label["text"] = "some text"。所以我将其添加为答案,因为它有效:

from tkinter import *
import random

root = Tk()
root.title("Die Roller")

entry1 = Entry(root, width = 5)
entry2 = Entry(root, width = 5)

def on_click():
    r = 0
    for z in range(0, int(entry1.get())):
        r += random.randint(1, int(entry2.get()))
    label5["text"] = r

label1 = Label(root, text = "Die Roller!")
label2 = Label(root, text = "Number of Die")
label3 = Label(root, text = "Number of Sides")
label4 = Label(root, text = "Total")
label5 = Label(root, text = " ")
button = Button(root, text = "Roll", command = on_click)

label1.grid(column = 1, row = 0)
label2.grid(column = 0, row = 1)
label3.grid(column = 0, row = 2)
entry1.grid(column = 2, row = 1)
entry2.grid(column = 2, row = 2)
label4.grid(column = 0, row = 4)
label5.grid(column = 2, row = 4)
button.grid(column = 1, row = 3)

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.