动态重命名tkinter窗口



我有以下代码,可以创建一个顶层窗口并将字典解析为Text小部件:

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函数解析字典,并将其内容写入Toplevel窗口中包含的文本小部件中。我想知道的是如何使用dicitonary的名称动态重命名Toplevel窗口。我知道我可以做到这一点:

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

但我确实有大约100个像上面这样的函数,所以,除了劳动密集型之外,我不确定是不是更像蟒蛇的方式,那么,有没有一种方法可以用字典名重命名窗口?(即"败血症关节炎"(感谢

如果数据位于名为infections的对象中,该对象具有Septic_arthritis等属性,最直接的解决方案是将数据和属性作为单独的参数传递,然后使用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)来获取给定感染的数据。

如果你想创建一个按钮来调用这个函数,它可能看起来像这样:

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

这将使用两个参数调用命令escrito:包含所有感染的对象和要显示的特定信息的键。

最新更新