如何从 tkinter 中的子 window 修改根 window?

How do I make modifications to the root window from a sub window in tkinter?

我正在尝试制作一个子 window,它允许您更改主 window 中的某些参数。我创建了一个函数,当它被按钮调用时,会弹出一个选项菜单来选择你想要改变的选项,然后是一些输入框来输入你想要改变的内容。

我的第一个想法是更改函数中的数据,然后 return 它,但我认为这行不通,因为只需按一下按钮即可调用该函数。有人有什么建议吗?

下面是一个简单的示例,说明如何直接更新根 window 以及全局命名空间中的任何变量。这只是您在通过按钮调用的功能中执行的操作的问题。

如果您有任何问题,请告诉我。

import tkinter as tk


root = tk.Tk()
root.config(background='white')
root.geometry('250x100')

label_1 = tk.Label(root, text=0)
label_1.pack()
label_2 = tk.Label(root, text='test')
label_2.pack()


def toggle_root_bg():
    # check the color of the root window and toggle accordingly.
    if root['background'] == 'black':
        root.config(background='white')
    else:
        root.config(background='black')


def update_root_labels(one, two):
    # Apply argument values to the text fields of the labels defined in the global namespace.
    label_1.config(text=one)
    label_2.config(text=two)


def sub_window():
    # setting sub window variable name to be used with other widgets.
    top = tk.Toplevel(root)
    tk.Label(top, text='Provide a number: ').grid(row=0, column=0)
    tk.Label(top, text='Provide a string: ').grid(row=1, column=0)
    entry_1 = tk.Entry(top)
    entry_2 = tk.Entry(top)
    entry_1.grid(row=0, column=1)
    entry_2.grid(row=1, column=1)

    # create a sub function to get the current entry field values
    # then pass these values on to our update function.
    def submit_update():
        update_root_labels(entry_1.get(), entry_2.get())

    tk.Button(top, text='Update root labels', command=submit_update).grid(row=2, column=0)
    tk.Button(top, text='Toggle Root Background', command=toggle_root_bg).grid(row=3, column=0)


tk.Button(root, text='Open sub window', command=sub_window).pack()
root.mainloop()

之前:

之后: