在运行时在 tkinter 中添加和更新新的小部件

Adding and updating new widget in tkinter in runtime

我正在尝试使用 Python 和 Tkinter 构建 GUI 创建器,但是 运行 遇到了问题。

我的问题是如何在运行时add\update小部件?

例如:

我在网上搜索过,但没有找到所需的解决方案。还尝试使用 How can i update a certain widget in tkinter,但根据我的输入,这不起作用。

from tkinter import *
root=Tk()
w_frame=Frame()
w_frame.pack()
def update_Frame():
    a=u_text_wid.get("1.0",END)
    b.config(a)
    root.update()
def add_wid_in_frame():
    global a,b
    a=Button(w_frame,text='heelo')
    a.pack()
    b=Label(w_frame,text='heelo')
    b.pack()
u_text_wid=Text()
u_text_wid.pack()
button1=Button(text="add",command=add_wid_in_frame)
button1.pack()
button1=Button(text="update",command=update_Frame)
button1.pack()
root.mainloop()

这导致我出错

unknown option "-bg="red"

注意: 我想根据用户提供的 属性 值更新小部件,因此它不会被硬编码到脚本中。

对于您的情况,您可以使用 ast.literal_eval() 将 JSON 字符串转换为字典并在 .config():

中使用字典
from ast import literal_eval
...
def update_Frame():
    a = u_text_wid.get("1.0", "end-1c") # don't include ending newline
    cnf = literal_eval(a) # convert JSON string to dictionary
    b.config(cnf)

JSON 字符串的示例输入:

{"fg":"yellow", "bg":"red"}

请注意,您也可以使用 json 模块来转换 JSON 字符串。

你收到这个错误是因为你从 Text 小部件中检索到的每个东西都是一个字符串,你不能直接将一个字符串传递给 .config 方法,你需要一个关键字然后你可以赋值可以是字符串。

根据你的问题和问题的评论,我得出的结论是:

  • 您想从 Text 小部件 运行 lable.config(bg='red')
  • 您想更改特定小部件的 属性。

您可以执行以下操作:

  1. 要运行 Tkinter code form Text widget,可以使用:
  • getattr方法
  • eval 方法
  1. 只需更改 属性 小部件:
def update_Frame():
    global bcd
    a = u_text_wid.get("1.0", "end-1c")
    b=a.split(",")
    c=[tuple(i.split("=")) if "=" in i else i for i in b]
    d=dict(i for i in c)
    for key,value in d.items():
        bcd[key]=value
  • 我们只能用字符串来改变属性这种格式widget_name[key]=value.

一些有用的链接: