簡體   English   中英

動態重命名 tkinter window

[英]dynamically rename tkinter window

我有以下代碼創建頂級 window 並將字典解析為文本小部件:

def escrito(**kwargs):
    write_window = Toplevel(root)
    #write_window.title(kwargs) (problematic code)
    writing_box = tk.Text(write_window, font = ("calibri", 20), width  = 60, height = 15, wrap=WORD)
    writing_box.pack(expand = tk.YES, fill = tk.X)
    writing_box.grid(row = 0, column = 0, sticky = 'nswe')
    texto = '\n'.join(key + ":\n" + value for key, value in kwargs.items())
    writing_box.insert("1.0", texto)

def septic_osteo():
    escrito(**infections.Septic_arthritis)
Septic_arthritis = {
'Empirical Treatment':
'Flucloxacillin 2g IV 6-hourly',
'If non-severe penicillin allergy':
'Ceftriaxone IV 2g ONCE daily',
'If severe penicillin allergy OR if known to be colonised with 
MRSA':
'Vancomycin infusion IV, Refer to  Vancomycin Prescribing 
Policy',
'If systemic signs of sepsis': 'Discuss with Consultant 
Microbiologist'
}

因此,當我運行代碼時,escrito 函數會解析字典並將其內容寫入包含在頂級 window 上的文本小部件中。 我想知道的是如何用字典名稱動態重命名頂層 window。 我知道我可以這樣做:

def septic_osteo():
    escrito(**infections.Septic_arthritis)
    write_window.title('Septic_arthritis)

但我確實有 100 個類似上面的函數,所以,除了勞動密集型之外,我不確定是不是更 Pythonic 的方式,所以,有沒有一種方法可以用字典名稱重命名 window? (即“膿毒性關節炎”)謝謝

如果您的數據位於名為infections的 object 中,並且具有Septic_arthritis等屬性,最直接的解決方案是將數據和屬性作為單獨的 arguments 傳遞,然后使用getattr獲取特定感染的數據。

它看起來像這樣:

def escrito(data, infection):

    write_window = Toplevel(root)
    write_window.title(infection)
    writing_box = tk.Text(write_window, font = ("calibri", 20), width  = 60, height = 15, wrap="word")
    writing_box.pack(expand = tk.YES, fill = tk.X)
    writing_box.grid(row = 0, column = 0, sticky = 'nswe')
    texto = '\n'.join(key + ":\n" + value for key, value in getattr(data, infection).items())
    writing_box.insert("1.0", texto)

關於上述代碼的重要一點是它使用getattr(data, infection)來獲取給定感染的數據。

如果你想創建一個按鈕來調用這個 function,它可能看起來像這樣:

button = tk.Button(..., command=lambda: escrito(infections, "Septic_arthritis"))

這將調用帶有兩個escrito的命令 escrito:包含所有感染的 object,以及要顯示的特定信息的密鑰。

暫無
暫無

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

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