从另一个文件获取变量 - python

时间:2017-07-28 18:39:19

标签: python python-3.x

我正在创建一个Tkinter程序,允许用户将文本输入到漂亮的框中,而不是python shell。

由于我想在多个程序中使用它,我将其作为一个可以在其他文件中使用的函数。

我可以让它在另一个文件中运行,但不在这里导入变量是我的代码。

文件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')

我收到错误ImportError: cannot import name 'answer'

1 个答案:

答案 0 :(得分:1)

answer is a local variable within按钮. If you want to导入它,您需要将其设为包属性:

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