如何从 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()
之前:
之后:
我正在尝试制作一个子 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()
之前:
之后: