如何在 tkinter 的顶级之间传递数据 [英] How to pass data between top levels in tkinter

查看:37
本文介绍了如何在 tkinter 的顶级之间传递数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对 tkinter 完全陌生.我试图在两个窗口之间传递数据.根窗口上有一个按钮.按钮按下将打开一个顶层.顶层窗口中有两个输入字段和一个提交按钮.用户可以输入两个数字并提交.我想要实现的是,按下提交按钮应该关闭顶层,结果(总和)应该显示在根窗口中.如何将输入字段数据传递给根窗口?

I am totally new to tkinter. I am trying to pass data between two windows. There is a button on root window. button press will open a top level. There are two entry fields and a submit button in on toplevel window. user can enter two number and submit. What i am trying to achieve is, pressing submit button should close the top level and result (sum) should be shown in the root window. How to pass entry field data to root window?

from tkinter import *
root= Tk()
root.geometry('600x400')
sum_var= StringVar()

def entry_Fn():
    level_1 = Toplevel(root)
    Label( level_1, text = "level one").pack()
    entry_1 =Entry(level_1)
    entry_1.pack()
    entry_2 =Entry(level_1)
    entry_2.pack()
    Button(level_1, text= "submit", command= submitBtn ).pack()

def submitBtn():
    val_1= entry_1.get()
    val_2= entry_2.get()
    sum_var.set(int(val_1)+ int(val_2))

Label(root, text = "Main window").pack()
Button(root, text= "To enter Data", command= entry_Fn).pack()
sum = Label(root, textvariable = sum_var)
sum.pack()

root.mainloop()

#result
val_1= entry_1.get()
NameError: name 'entry_1' is not defined

#shall I define some global variables?

推荐答案

在这种情况下,您不必声明 global.只需在 entry_Fn 中缩进 submitBtn 函数:

In this case, you don't have to declare global. Simply indent your submitBtn function inside entry_Fn:

def entry_Fn():
    level_1 = Toplevel(root)
    Label( level_1, text = "level one").pack()
    entry_1 = Entry(level_1)
    entry_1.pack()
    entry_2 = Entry(level_1)
    entry_2.pack()
    def submitBtn():
        val_1= entry_1.get()
        val_2= entry_2.get()
        sum_var.set(int(val_1)+ int(val_2))
        level_1.destroy()
    Button(level_1, text= "submit", command=submitBtn).pack()

但通常创建类更容易,因此您可以避免此类范围问题,如下所示:

But generally it is easier to make a class so you can avoid this kind of scope problems, like below:

from tkinter import *

class GUI(Tk):
    def __init__(self):
        super().__init__()
        self.geometry('600x400')
        self.sum_var= StringVar()
        Label(self, text="Main window").pack()
        Button(self, text="To enter Data", command=self.entry_Fn).pack()
        sum = Label(self, textvariable=self.sum_var)
        sum.pack()

    def entry_Fn(self):
        self.level_1 = Toplevel(self)
        Label(self.level_1, text = "level one").pack()
        self.entry_1 = Entry(self.level_1)
        self.entry_1.pack()
        self.entry_2 = Entry(self.level_1)
        self.entry_2.pack()
        Button(self.level_1, text="submit", command=self.submitBtn).pack()

    def submitBtn(self):
        val_1 = self.entry_1.get()
        val_2 = self.entry_2.get()
        self.sum_var.set(int(val_1)+ int(val_2))
        self.level_1.destroy()

root = GUI()

root.mainloop()

这篇关于如何在 tkinter 的顶级之间传递数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆