Function PythonTkinter-如何使用从一个函数到另一个函数的值?

Function PythonTkinter-如何使用从一个函数到另一个函数的值?,function,class,tkinter,Function,Class,Tkinter,我正在自学Python和Tkinter,对于我正在编写的代码,我有一些问题。 我试图让程序执行属于一个类的两个函数。 因此,当我尝试执行下面的代码时,tkinter执行第一个函数,但不执行函数2,我不明白为什么。 谁能帮我一下吗。 在函数2中,j的值需要等于函数1中j的值。 多谢各位 from tkinter import * myapp=Tk() myapp.geometry('1100x700+100+50') myapp.title('List Generator') input1=In

我正在自学Python和Tkinter,对于我正在编写的代码,我有一些问题。 我试图让程序执行属于一个类的两个函数。 因此,当我尝试执行下面的代码时,tkinter执行第一个函数,但不执行函数2,我不明白为什么。 谁能帮我一下吗。 在函数2中,j的值需要等于函数1中j的值。 多谢各位

from tkinter import *
myapp=Tk()
myapp.geometry('1100x700+100+50')
myapp.title('List Generator')

input1=IntVar()
input2=IntVar()

class Myclass:
    def __init__(self):
        text1=input1.get()
        text2=input2.get()
        ex1=float(text1)
        ex2=float(text2)
        totbtu=float(ex1*ex2)
        realbtu=totbtu+(totbtu*0.15)
        j= float(totbtu + 100)
        Label(myapp, text=totbtu).place(x=600,y=20)
        Label(myapp, text=realbtu).place(x=600,y=60)
        Label(myapp, text=j).place(x=600,y=100)

    def function2(self):
        h=j+33
        Label(myapp, text=h).place(x=600,y=140)

label1 = Label(myapp, text='Enter Area').place(x=10,y=10)
area_entry=Entry(myapp,textvariable=input1 ).place(x=140,y=10)
label11 = Label(myapp,text='SQ FT',).place(x=270,y=10)

label2 = Label(myapp, text='Enter Load').place(x=10,y=35)
area_entry=Entry(myapp,textvariable=input2 ).place(x=140,y=35)
label22 = Label(myapp,text="BTU's/SQ FT",).place(x=270,y=35)

button1 = Button(myapp, text = 'Generate',padx=5,pady=5,command=Myclass).place(x=10,y=70)

myapp.mainloop()

如果我正确理解您的问题,您需要使用一个按钮命令调用两个函数,并且还需要在两个函数中使用一个值(我假设)

看看我的解决方案:

from Tkinter import *
myapp=Tk()
myapp.geometry('1100x700+100+50')
myapp.title('List Generator')

input1=IntVar()
input2=IntVar()
j = 0 #needed for the value to be referenced in both function1 and function2
def function1():
   global j
   text1=input1.get()
   text2=input2.get()
   ex1=float(text1)
   ex2=float(text2)
   totbtu=float(ex1*ex2)
   realbtu=totbtu+(totbtu*0.15)
   j= float(totbtu + 100)
   Label(myapp, text=totbtu).place(x=600,y=20)
   Label(myapp, text=realbtu).place(x=600,y=60)
   Label(myapp, text=j).place(x=600,y=100)
   print(j)

def function2():
   global j
   h=j+33
   Label(myapp, text=h).place(x=600,y=140)
   print(j)

def wombocombo():
   function1()
   function2()
label1 = Label(myapp, text='Enter Area').place(x=10,y=10)
area_entry=Entry(myapp,textvariable=input1 ).place(x=140,y=10)
label11 = Label(myapp,text='SQ FT',).place(x=270,y=10)
label2 = Label(myapp, text='Enter Load').place(x=10,y=35)
area_entry=Entry(myapp,textvariable=input2 ).place(x=140,y=35)
label22 = Label(myapp,text="BTU's/SQ FT",).place(x=270,y=35)

button1 = Button(myapp, text = 'Generate',padx=5,pady=5,command=wombocombo).place(x=10,y=70)

myapp.mainloop()
当您在按下按钮时指定要调用的函数时,使用的是
command=myFunction
myFunction是一个函数,而不是一个类。同样地,当像
Myclass
这样的类是命令而不是函数时,就会出现问题

要使用一个命令执行两个函数,只需将两个函数合并为一个。如果你看一下
wombocombo
函数,它会同时调用
function1
function2
,一举两得


至于在两个函数之间共享一个变量,我总是发现在范围阶梯上更宽一步并在那里添加变量是最容易的


在本例中,我们在
function1
function2
中都需要相同的j变量。范围更广,我们在
function1
function2
都可以访问的地方定义j

非常感谢你对枪手的帮助。我刚开始学习用python编写代码,这对我帮助很大。嗨,Gunner,我对这段代码还有一个问题,因为在function2中,我想使用function1中的j值。@PeterS嗨,谢谢你让我知道。我不确定我以前是怎么想的,但是j在两个函数中应该是相同的。我又增加了两行,在每个函数的第一行,一行告诉程序“在这个函数中,使用全局j变量,不要使用局部变量”。我所做的编辑应该会有帮助!再次感谢。嗨,枪手,这很有效。非常感谢你。这太棒了。每次单击“生成”按钮时,它都会打印空闲时的j值。这样可以吗?你知道有没有一种方法可以写这段代码而不使用全局变量,因为我会有很多全局变量。谢谢