我正在嘗試使用 Python 和 Tkinter 構建 GUI 創建器,但遇到了問題。
我的問題是如何在運行時添加\更新小部件?
例如:
- 我已經創建了主視窗。
- 在那個主視窗中,我創建了一個
w_frame包含一堆小部件的框架名稱。 - 根據我在 旁邊的 Text 或 Entry 小部件中的輸入
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()
這導致我出錯
未知選項“-bg =“紅色”
注意:我想根據用戶提供的屬性值更新小部件,所以它不會被硬編碼到腳本中。
uj5u.com熱心網友回復:
您收到錯誤是因為您從小部件中檢索的每件事Text都是一個字串,并且您不能直接將字串傳遞給.config方法,您需要一個關鍵字,然后您可以分配可以是字串的值。
根據您的問題和對該問題的評論,我得出的結論是:
- 您想
lable.config(bg='red')從小Text部件運行。 - 您想更改特定小部件的屬性。
以下是您可以執行的操作:
- 要運行 Tkinter 代碼表單
Text小部件,您可以使用:
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。
一些有用的鏈接:
- 評估()
- 獲取屬性()
uj5u.com熱心網友回復:
對于您的情況,您可以使用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 字串。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/446470.html
