gpt4 book ai didi

python - 在 tkinter (python3) : unexpected behavior 中将值从子窗口传递到父窗口

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:06 26 4
gpt4 key购买 nike

我正在尝试使用 tkinter 编写一个 python GUI,除其他外,它可以处理输入到弹出“子”窗口中的值。这是一个非常精简的 GUI 版本:

from minimalChild import Child
import tkinter as tk

class exGui(tk.Tk):

def update(self):
self.amount = Child(self)
print(self.amount)

def __init__(self):
tk.Tk.__init__(self)
frame = tk.Frame(self)
frame.grid()

self.amount = 0
self.button = tk.Button(frame, text="pay", command=self.update).grid(row=0, column=0)
self.button = tk.Button(frame, text="Quit", fg="red", command=frame.quit).grid(row=0, column=1)

def main():
exGui().mainloop()

if __name__ == '__main__':
main()

以及 Child 类的最小版本:

import tkinter as tk

class Child(tk.Toplevel):

def submitFunction(self):
amount = 2
self.parent.amount= amount
self.destroy()

def __init__(self, parent):
tk.Toplevel.__init__(self, parent)
self.parent = parent
self.frame = tk.Frame(self)
self.frame.grid()

submit = tk.Button(self.frame, text='Submit', command = self.submitFunction).grid(row=0, column=0)

显然我不理解更新方法中的流程,因为 print(self.amount) 没有给出预期值“2”。相反,它给出了一些在我单击“提交”按钮之前出现的 float ,并且每次运行代码时都会有所不同。有没有办法告诉主窗口等待子窗口返回值?另外,谁能解释一下这个十进制数是什么?我预计 print 语句至少返回 0?

我看过这个帖子Pass user input from child to parent window python tkinter仍然不明白如何解决问题。

任何帮助、批评或引用资料,我们将不胜感激!

最佳答案

欢迎来到 Stackoverflow。感谢您提出清晰简洁的问题。

当您在更新方法中将 Child 分配给 self.amount 时,您会立即将其打印出来。在我的控制台上,我打印了 .!Child 。该方法完成时不会等待 Child 中的任何操作。它创建窗口,打印 amount 的值,然后等待用户与任一窗口的交互。在 update 方法中,您将 amount 设置为由 Child() 创建的对象。

你写的内容可能确实将parent.amount设置为2,但它是在你打印结果后才设置的。

我已在您的主窗口中添加了一个结果标签,该标签最初显示为 0。从 Child 提交会将其设置为 2。

import tkinter as tk

class Child(tk.Toplevel):

def submitFunction(self):
amount = 2
self.parent.amount.set(str( amount)) # Set parent amount.
self.destroy()

def __init__(self, parent):
tk.Toplevel.__init__(self, parent)
self.parent = parent
self.frame = tk.Frame(self)
self.frame.grid()

submit = tk.Button(self.frame, text='Submit', command = self.submitFunction).grid(row=0, column=0)

class exGui(tk.Tk):

def update(self):
self.kid = Child(self)
print(self.amount, self.kid, self.amount.get())

def __init__(self):
tk.Tk.__init__(self)
frame = tk.Frame(self)
frame.grid()
self.amount = tk.StringVar() # Make amount a StringVar
self.amount.set('0') # Set it to 0
self.button = tk.Button(frame, text="pay", command=self.update).grid(row=0, column=0)
self.button = tk.Button(frame, text="Quit", fg="red", command=frame.quit).grid(row=0, column=1)
self.result = tk.Label(frame, textvariable = self.amount).grid(row=0, column=2) # Add a result label.
# This is linked to the self.amount StringVar.

def main():
exGui().mainloop()

我希望这足够清楚。

关于python - 在 tkinter (python3) : unexpected behavior 中将值从子窗口传递到父窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56191628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com