我正在使用带有tkinter的Python3.当按下按钮时,应该弹出一个子窗口,其中包含一个旋转框.微调框的初始值应该是一个参数.子窗口还包含一个"Set"按钮.当按下按钮时,子窗口应该关闭,并且旋转框的值应该传递给父应用程序.
在我的最小非工作示例中,主窗口中的旋转框及其对应的按钮按预期工作.但是,子窗口中的相同代码不起作用,既没有正确设置初始值,也没有将微调框的值返回给主应用程序.
import tkinter as tk
class spin_child:
def __init__(self, value, callback):
self.root = tk.Tk()
self.callback = callback
self.var_spin = tk.IntVar()
self.spin = tk.Spinbox(self.root, from_=0, to=100, textvariable=self.var_spin, width=10)
self.spin.pack()
self.button = tk.Button(self.root, text="Set", command=lambda: self.return_value(self.var_spin.get()), width=20)
self.button.pack()
def close_window(self):
self.root.destroy()
def return_value(self, value):
self.callback(value)
self.root.destroy()
def run(self):
self.root.mainloop()
def callback(value):
print(value)
root = tk.Tk()
btn = tk.Button(root, text="Open Window", command=lambda: spin_child(20, callback), width=50)
btn.pack()
var_spin = tk.IntVar()
var_spin.set(20)
spin = tk.Spinbox(root, from_=0, to=100, textvariable=var_spin, width=10)
spin.pack()
btn = tk.Button(root, text="Local Spin", command=lambda: print(var_spin.get()), width=50)
btn.pack()
root.mainloop()
我还try 将我的子窗口实现为一个函数,而不是行为没有变化的类.
import tkinter as tk
def spin_child(value, callback):
def return_value(value):
callback(value)
root.destroy()
root = tk.Tk()
callback = callback
var_spin = tk.IntVar()
spin = tk.Spinbox(root, from_=0, to=100, textvariable=var_spin, width=10)
spin.pack()
button = tk.Button(root, text="Set", command=lambda: return_value(var_spin.get()), width=20)
button.pack()
root.mainloop()
def callback(value):
print(value)
root = tk.Tk()
btn = tk.Button(root, text="Open Window", command=lambda: spin_child(20, callback), width=50)
btn.pack()
var_spin = tk.IntVar()
var_spin.set(20)
spin = tk.Spinbox(root, from_=0, to=100, textvariable=var_spin, width=10)
spin.pack()
btn = tk.Button(root, text="Local Spin", command=lambda: print(var_spin.get()), width=50)
btn.pack()
root.mainloop()
我真的不能把我的头周围可能是什么问题在这里,任何 idea ?
提前谢谢!