2016-07-11 4 views
1

例えば、私はa.pyファイルに次のコードを持っている:私がチェックしたときにpythonでtkinterを使用する場合、別の関数でfuctionにあるチェックボックスを呼び出す方法は?

import tkinter 
def main(): 
    top = tkinter.Tk() 
    top.title("Main") 

    Var = tkinter.IntVar() 
    CheckBox = tkinter.Checkbutton(top, text="test", variable=Var) 
    CheckBox.grid(column=1, row=1) 

    startButton = tkinter.Button(top, text="Start", command=lambda: a(Var)) 
    startButton.grid(column=1, row=2) 

    top.mainloop() 

def a(Var): 
    print(Var.get()) 

をし、別のb.pyファイルに私は期待して何を次のコード

import a 
import tkinter 

top = tkinter.Tk() 
top.title("Test") 

def run(): 
    a.main() 

startButton = tkinter.Button(top, text="Start", command=run) 
startButton.grid(column=0, row=0) 

top.mainloop() 

を持っているがありますチェックボックスをオンにすると1が出力され、チェックを外すと0が出力されます。 チェックボックスをオンまたはオフにしても、常に0が出力されます。

答えて

0

Vara.pyにローカルであるため、b.pyにアクセスできるようにする必要があります。あなたはa.pyにこの方法をヴァールを定義するとしない限り、簡単なimport aは十分ではありません。

a.py

import tkinter 

# Must be done here otherwise we can not declare Var above 
top = tkinter.Tk() 
# Make Var available to b.py 
Var = tkinter.IntVar() 

def main(): 
    global Var 
    global top 

    #top = tkinter.Tk() 
    top.title("Fix Ratio") 

    Var = tkinter.IntVar() 
    CheckBox = tkinter.Checkbutton(top, text="test", variable=Var) 
    CheckBox.grid(column=1, row=1) 

    startButton = tkinter.Button(top, text="Start", command=lambda: a(Var)) 
    startButton.grid(column=1, row=2) 

    #top.mainloop() 

def a(Var): 
    print(Var.get()) 

b.py

あなたが別の2を持っているしたい場合あなたの実際の実行中のプログラムに表示されているように、windowsの名前をtopに変更する必要があります。b.py

import tkinter 
import a # Var now is accessible from b.py 

to = tkinter.Tk() 
to.title("Conditioning") 

def run(): 
    a.main() 

startButton = program.tkinter.Button(to, text="Start", command=run) 
startButton.grid(column=0, row=0) 

to.mainloop() 

デモ:ここ

は、チェックボタンがチェックされていないときに、プログラム上b.pyを実行しているのスクリーンショットであると、後に、確認:

enter image description here

+0

これは動作しますが、最初のウィンドウの開始ボタンを押す前に2番目のtkinterウィンドウが表示されます。最初のウィンドウでスタートボタンを押した後、2番目のウィンドウが最初に表示される代わりに表示された後に動作させることは可能ですか?なぜなら、より多くのウィンドウを制御するとき、それらを最初に表示させることはそれほど良くないからです。ありがとうございます –

+0

そして、私のプログラムでは、tkinter.Entryをチェックボックスと同じ機能で使用していますが、正常に動作します。なぜそれがうまくいくのか分かりませんが、チェックボックスはできません。 –

0

これは、という事実によるものですTkの2つのインスタンスがあります。 Tkinterは一度にインスタンスを正確に持つように設計されています。各インスタンスには独自の内部名前空間があるため、あるインスタンスの変数は他のインスタンスには表示されません。

関連する問題