繁体   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