Python 更改标签文本,Tkinter
下面是我的代码片段:Python 更改标签文本,Tkinter,python,tkinter,label,Python,Tkinter,Label,下面是我的代码片段: def message(name, button): button['state'] = DISABLED mgs_label = ttk.Label(root) if button["text"] == "Encryption": mgs_label.pack_forget() mgs = encryption(name) mgs_label = ttk.Label
def message(name, button):
button['state'] = DISABLED
mgs_label = ttk.Label(root)
if button["text"] == "Encryption":
mgs_label.pack_forget()
mgs = encryption(name)
mgs_label = ttk.Label(root, text=mgs).pack(side=LEFT)
if button["text"] == "Decryption":
mgs_label.pack_forget()
mgs = decryption(name)
mgs_label = ttk.Label(root, text=mgs).pack(side=LEFT)
当我点击按钮时,无论是加密按钮还是解密按钮,它都会出现在提到的位置。
以下是快照:
当我点击另一个按钮时,文本位于前一个按钮之后,我想删除前一个文本,然后显示最后一个mgs
第二个快照:
即使我尝试创建全局变量,但问题是加密或解密已完成,但mgs未在GUI上显示。以下是用于此的代码:
encryption_label = ttk.Label(root)
decryption_label = ttk.Label(root)
def message(name, button):
button['state'] = DISABLED
global encryption_label, decryption_label
if button["text"] == "Encryption":
if decryption_label.winfo_exists():
decryption_label.pack_forget()
mgs = encryption(name)
encryption_label["text"] = mgs
encryption_label.pack(side=LEFT)
if button["text"] == "Decryption":
if encryption_label.winfo_exists():
encryption_label.pack_forget()
mgs = decryption(name)
decryption_label["text"] = mgs
decryption_label.pack(side=LEFT)
我建议只创建一次标签,并使用label.configure更改文本。 您应该提供一个工作示例,而不是代码段。我给你做了一个。 谢谢你的提问
import tkinter as tk
from tkinter import ttk
def e():
message(None,x_button)
def d():
message(None,y_button)
def message(name, button):
#button['state'] = tk.DISABLED
if button["text"] == "Encryption":
mgs_label.configure(text = 'encrypted stuff')
if button["text"] == "Decryption":
mgs_label.configure(text = 'decrypted stuff')
root = tk.Tk()
x_button = tk.Button(root,text = 'Encryption',
command = e)
y_button = tk.Button(root,text = 'Decryption',
command = d )
mgs_label = ttk.Label(root)
y_button.pack()
x_button.pack()
mgs_label.pack()
root.mainloop()
尝试使用不同的标签变量进行
加密
和解密
states@crackanddie我试过并相应地编辑了这个问题,但仍然不起作用。@HimanshuGurjar第二种方法更好,但您的缩进似乎不正确。由于在第二种方法中,您使用的是两个标签,因此无需在每次调用消息时设置文本,而只需在声明本身中设置文本encryption\u label=ttk.label(root,text='Successfull encrypted')
。但更好的方法是声明标签的单个全局实例并更新文本。第一种方法不起作用,因为每次调用消息时都要创建标签的新实例,因此使用mgs\u label.pack\u forget()
将永远不会隐藏以前的标签。另外,在mgs\u label=ttk.label(root,text=mgs).pack(side=LEFT)
msg\u label
是None
,因为pack
返回None
@JacksonPro是的,现在我明白了,谢谢你的建议。但即使使用单个全局标签变量,它也不起作用,因此,我只是在调用者函数中创建了一个标签,并将其作为参数传递给被调用函数,然后对其进行配置。