我正在创建一个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'
答案 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()