在运行时在 tkinter 中添加和更新新的小部件
Adding and updating new widget in tkinter in runtime
我正在尝试使用 Python 和 Tkinter 构建 GUI 创建器,但是 运行 遇到了问题。
我的问题是如何在运行时add\update小部件?
例如:
- 我已经创建了主window。
- 在那个主要 window 中,我创建了一个框架名称
w_frame
,其中包含一堆小部件。
- 根据我在
w_frame
旁边的文本或条目小部件中的输入,我想更新一个特定的小部件。
- 假设
w_frame
包含一个 Entry 小部件、单选按钮、按钮和标签,所有这些都具有显示它的基本或主要属性。
- 现在我想更改标签的背景颜色。
- 简而言之,我想在文本小部件中编写代码
label_name.property_name=value
或例如 a_label.bg=red
,一旦我按下应用按钮,小部件就会发生变化。
我在网上搜索过,但没有找到所需的解决方案。还尝试使用 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')
。
- 您想更改特定小部件的 属性。
您可以执行以下操作:
- 要运行 Tkinter code form
Text
widget,可以使用:
getattr
方法
eval
方法
- 只需更改 属性 小部件:
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
.
一些有用的链接:
我正在尝试使用 Python 和 Tkinter 构建 GUI 创建器,但是 运行 遇到了问题。
我的问题是如何在运行时add\update小部件?
例如:
- 我已经创建了主window。
- 在那个主要 window 中,我创建了一个框架名称
w_frame
,其中包含一堆小部件。 - 根据我在
w_frame
旁边的文本或条目小部件中的输入,我想更新一个特定的小部件。 - 假设
w_frame
包含一个 Entry 小部件、单选按钮、按钮和标签,所有这些都具有显示它的基本或主要属性。 - 现在我想更改标签的背景颜色。
- 简而言之,我想在文本小部件中编写代码
label_name.property_name=value
或例如a_label.bg=red
,一旦我按下应用按钮,小部件就会发生变化。
我在网上搜索过,但没有找到所需的解决方案。还尝试使用 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')
。 - 您想更改特定小部件的 属性。
您可以执行以下操作:
- 要运行 Tkinter code form
Text
widget,可以使用:
getattr
方法eval
方法
- 只需更改 属性 小部件:
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
.
一些有用的链接: