2017-07-28 21 views
1

私はPythonシェルではなく見た目の良いボックスにテキストを入力できるTkinterプログラムを作成しています。別のファイルから変数を取得する - python

私はこれを複数のプログラムで使いたいので、他のファイルでも使えるようにしました。

私は別のファイルで実行することができますが、ここでは変数をインポートできません。これは私のコードです。

ファイル1:

import tkinter as tk 

def input_text(label_text, button_text): 
    class SampleApp(tk.Tk): 

     def __init__(self): 
      tk.Tk.__init__(self) 
      self.entry = tk.Entry(self) 
      self.button = tk.Button(self, text=button_text, command=self.on_button) 
      self.label = tk.Label(self, text=label_text) 
      self.label.pack(side = 'top', pady = 5) 
      self.button.pack(side = 'bottom', pady = 5) 
      self.entry.pack() 


     def on_button(self): 
      answer = self.entry.get() 
      self.destroy() 


    w = SampleApp() 
    w.resizable(width=True, height=True) 
    w.geometry('{}x{}'.format(180, 90)) 
    w.mainloop() 

がファイル2:

import text_input as ti 
from text_input import answer 
ti.input_text('Enter some text', 'OK') 

私はそれimport`エラーImportError: cannot import name 'answer'

+0

だろうあなたはon_button' '、任意の場所に「答え」を保存していないようです。おそらくこれを行うより良い方法があると思います。たとえば、クラスとコントロールコードを同じ関数に持たないなどです。 –

+0

ファイル1に「回答」がありません –

+0

はい最後の機能(最下部)にあります – Daniel

答えて

1

answer is a local variable withinボタン. If you want toを取得し、あなたはそれpackage属性にする必要があります。

import tkinter as tk 

global answer 

def input_text(label_text, button_text): 
    class SampleApp(tk.Tk): 
    ... 

     def on_button(self): 
      global answer 
      answer = self.entry.get() 

しかし、これは非常にのデータにアクセスするための方法です。きれいなモジュールデザインはオブジェクト(SampleApp)を手元に持っていて、そのアプリケーションのメソッド呼び出しで解答を抽出します。さらに簡単に言えば、その値をon_buttonから返すのはなぜですか?それは関数の外では存在しませんので

def on_button(self): 
     answer = self.entry.get() 
     self.destroy() 
     return answer 

...ので、あなたの使用量が

response = my_app.on_button() 
関連する問題