函数之间的python变量

时间:2016-12-31 11:06:26

标签: python-2.7 variables tkinter

我有一个简单的问题。我有这个2功能,但我不知道如何从一个函数(Vstredvyp)到另一个函数(Vstredvysl)获取变量(VstredA1,VstredA2,VstredB1,VstredB2)。我尝试使用全局变量,但第二个函数无法读取变量。

def Vstredvyp():
    vstredvyp = Tk.Tk()
    vstredvyp.title("Stred strany - Vypocet")
    vstredvyp.minsize(300, 240)
    vstredvyp.maxsize(600, 480)
    Tk.Label(vstredvyp, text="Zadejte souřadnice bodu:").pack()
    RvstredA1 = Tk.LabelFrame(vstredvyp, text="X souradnice A")
    RvstredA1.pack()
    RvstredA2 = Tk.LabelFrame(vstredvyp, text="Y souradnice A")
    RvstredA2.pack()
    RvstredB1 = Tk.LabelFrame(vstredvyp, text="X souradnice B")
    RvstredB1.pack()
    RvstredB2 = Tk.LabelFrame(vstredvyp, text="Y souradnice B")
    RvstredB2.pack()
    global VstredA1
    global VstredA2
    global VstredB1
    global VstredB2
    VstredA1 = Tk.Entry(RvstredA1)
    VstredA1.pack()
    VstredA2 = Tk.Entry(RvstredA2)
    VstredA2.pack()
    VstredB1 = Tk.Entry(RvstredB1)
    VstredB1.pack()
    VstredB2 = Tk.Entry(RvstredB2)
    VstredB2.pack()
    VstredA1 = Tk.IntType()
    VstredA2 = Tk.IntType()
    VstredB1 = Tk.IntType()
    VstredB2 = Tk.IntType()
    Tk.Button(vstredvyp, text="Ok", command=Vstredvysl).pack()
    Tk.Button(vstredvyp, text="Zpet", command=vstredvyp.destroy).pack()
    vstredvyp.mainloop()
    return


def Vstredvysl():
    vstredvysl = Tk.Tk()
    vstredvysl.title("Stred strany - Vysledek")
    vstredvysl.minsize(150, 120)
    vstredvysl.maxsize(300, 240)
    if VstredA1 == VstredB1 and VstredA2 == VstredB2:
        Tk.Label(vstredvysl, text="Nelze zjistit stred protoze body jsou totozne").pack()
        Tk.Button(vstredvysl, text="Zpet", command=vstredvysl.destroy).pack()
        vstredvysl.mainloop()
    else:
        Vstred1 = (VstredA1 + VstredB1) / 2
        Vstred2 = (VstredA2 + VstredB2) / 2
        Tk.Label(vstredvysl, text=Vstred1).pack()
        Tk.Label(vstredvysl, text=Vstred2).pack()
        Tk.Button(vstredvysl, text="Zpet", command=vstredvysl.destroy).pack()
        vstredvysl.mainloop()
    return

1 个答案:

答案 0 :(得分:1)

使用全局变量和两个窗口的工作示例。

它只使用一个mainloop()Toplevel()来创建第二个窗口。

import tkinter as tk

# --- functions ---

def main():
    #inform function to use external/global variable
    global int_var # only if you will use `=` to change value

    root = tk.Tk()
    root.title("Root")

    # change global variable using `=`
    int_var = tk.IntVar()

    # use global variable
    e = tk.Entry(root, textvariable=int_var)
    e.pack()

    tk.Button(root, text="Second", command=second).pack(fill='x')
    tk.Button(root, text="Exit", command=root.destroy).pack(fill='x')

    root.mainloop()


def second():
    #inform function to use external/global variable
    #global int_var # only if you will use `=` to change value

    other = tk.Toplevel()
    other.title("Other")

    # use global variable
    l = tk.Label(other, textvariable=int_var)
    l.pack()

    tk.Button(other, text="Exit", command=other.destroy).pack()

    #other.wait_window()

# --- start ---

# create global variable
int_var = None

main()