2016-05-30 13 views
1

私はPythonとTkinterを自分で学習しています。私が書いているこのコードに関するいくつかの質問があります。 クラスの一部である2つの関数を実行するプログラムを取得しようとしています。 したがって、以下のコードを実行しようとすると、tkinterは最初の関数を実行しますが、関数2は実行しません。理由はわかりません。 誰かがこれで私を助けてくれますか? そしてfunction2では、jの値はfunction1からのjの値と等しい必要があります。 ありがとうございます。Python Tkinter - ある関数から別の関数にどのように値を使用できますか?

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() 

答えて

0

私が正しくあなたの質問を理解していれば、あなたはまた、(私は仮定している)の両方の機能に一つの値を使用する必要が 1つのボタンコマンドとの2つの機能を呼び出す必要があります。

は、私の解決策を見てみましょう:あなたはボタンが押されたときに呼び出される関数を決定する場合

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のようなクラスがコマンドである場合、問題が発生します。

1つのコマンドで2つの関数を実行するには、単純に両方の関数を1に結合します。wombocombo関数を見ると、function1function2の両方が呼び出され、1つの石で2つの鳥が命中します。


は、両方の機能の間で変数を共有するためとして、私は常にスコープの梯子の上に広い一歩を行くとそこに私の変数を追加するのがもっとも簡単です。

この例では、function1function2の両方に同じj変数が必要でした。範囲が広くなると、function1function2の両方にアクセスできる場所にjを定義します。

+0

Gunnerさん、ありがとうございます。私はちょうどpythonでコード化することを学び始めたので、これは大きな助けになります。 – PeterS

+0

こんにちはガンナー、私はまだ関数2のようにこのコードに問題がありますfunction1からのjの値を使用したいと思います。 – PeterS

+0

@PeterSこんにちは、私に知らせてくれてありがとう。私は前に何を考えていたのか分かりませんが、どちらの関数でも同じでなければなりません。私は2つの行を追加しました。各関数の最初の行に1つは "この関数では、グローバル変数を使用し、ローカルは使用しない"というプログラムに伝えます。私が作った編集が助けてくれるはずです!再度、感謝します。 –

関連する問題