Function PythonTkinter-如何使用从一个函数到另一个函数的值?
我正在自学Python和Tkinter,对于我正在编写的代码,我有一些问题。 我试图让程序执行属于一个类的两个函数。 因此,当我尝试执行下面的代码时,tkinter执行第一个函数,但不执行函数2,我不明白为什么。 谁能帮我一下吗。 在函数2中,j的值需要等于函数1中j的值。 多谢各位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
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值。这样可以吗?你知道有没有一种方法可以写这段代码而不使用全局变量,因为我会有很多全局变量。谢谢