簡體   English   中英

將字典中的鍵/值對放入 Tkinter 中的 set() 值

[英]Placing key/value pairs from dict into .set() values in Tkinter

在 Tkinter 中,我試圖將名為“headers”的字典中的鍵/值對放在下面 set_values 元組中的 set() 對中。

在此過程之前,我打開一個 json 文件,將數據反序列化到一個名為headers的字典中。 本詞典適用於 Tkinter App 中的 API 標題。

set_value對是 API header 鍵和值的 5 對條目。 所以,如果 dict 標頭最終只是 3 個鍵/值對,我不想使用所有 5 個 set_value,我只想使用 3 個。

基本上,我正在考慮一種方法,將標頭鍵/值對放在 the.set() 受尊重的 .set() 對中。 請參閱底部的預期 output。

我有一個 dict() 命名的標題:

headers = {'First': variable1, 'Second': variable2, 'Third': variable3}

而且,在 Tkinter 上,我有大約 5 對不同的Entries (如下):我將這些.sets()放在一個元組中,因為我認為將標題中的鍵/值對迭代並設置到下面的 set_values 中可能更容易。 或者聽寫可能會更好。

set_values = ( ( 1_key_entry.set(),  1_value_entry.set() ),
               ( 2_key_entry.set(), 2_value_entry.set() ),
               ( 3_key_entry.set(), 3_value_entry.set() ),
               ( 4_key_entry.set(), 4_value_entry.set() ),
               ( 5_key_entry.set(), 5_value_entry.set() ),
              )

現在,基於headers的長度,比如說 3,我只希望將 headers 中的那 3 個鍵/值對插入到set_values中的 .set() 中。

我想要的 output 是:(注意.set(key).set(value) ):

set_values = ( ( 1_key_entry.set('First'), 1_value_entry.set(variable1) ),
               ( 2_key_entry.set('Second'), 2_value_entry.set(variable2) ),
               ( 3_key_entry.set('Third'), 3_value_entry.set(variable3) )
             )

長度:

x = len(headers)   # Length of dict headers

y = set_values[:x]  # set_values pairs needed based on length of headers.

在我的應用程序中,我有一個簡單的解決方法,但它基於斷言 k 等於輸入字段中的用戶輸入,如內容類型、授權等。

for k, v in json_file.items():
    if k == 'Content-Type':
        1_key_entry.set(k)
        1_value_entry.set(v)
    elif k == 'Authorization':
        2_key_entry.set(k)
        2_value_entry.set(v)
       .
       .
       .

但是,我需要的是 headers 字典中的任何 k/v 對都可以自動設置為 set_values 中的 set() 對。

我不是 100% 清楚你在做什么,但如果我理解正確的話:你想將 JSON 字典中的鍵/值對拆分成 tkinter Entry小部件對?

如果是這種情況,那么這里是一個如何在循環中執行此操作的示例:

import tkinter as tk


root = tk.Tk()
# get your values however you need to, I'm just using numbers as placeholders
headers = {
    'First': 1,
    'Second': 2,
    'Third': 3,
}

# notice how Entry is only being instantiated twice in this loop...
for i, (k, v) in enumerate(headers.items()):
    # column of Entry widgets w/ text from dict keys
    ent_k = tk.Entry(root)
    ent_k.insert(tk.END, k)
    ent_k.grid(i, 0)
    # column of Entry widgets w/ text from dict values
    ent_v = tk.Entry(root)
    ent_v.insert(tk.END, v)
    ent_v.grid(i, 1)

root.mainloop()

這有幫助嗎?

請注意,像這樣在循環中聲明小部件的棘手部分是無法通過名稱訪問各個條目,因此以編程方式設置它們的值變得困難。 您可能不得不訴諸某種涉及root.winfo_children()的詭計來獲取父 window 中的小部件列表...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM