2013-12-11 148 views
0

不久前,我问了一个关于如何从输入语句导入的问题。搞定了。现在我将冗长的代码升级到用户的GUI。同样的问题。如何根据tkinter widget Entry中的用户输入导入模块。 我本来有:从tkinter Widget导入模块

var1=__import__(input("Enter a module: ")) 

,并试图像这样:

import tkinter 
var1=__import__(tkinter.Entry(top, bd=5)).pack() 

几个不同的措辞都导致基本错误:

TypeError: __import__() argument 1 must be str, not Entry 

我有几个不同的方法仍在我的名单上试试。例如:

var1=Entry(top, bd=5).grid(row=7) 
var2=Entry.get(var1) 
var=__import__(var2) 

这给了我相当可怕的错误:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python33\lib\tkinter\__init__.py", line 1475, in __call__ 
    return self.func(*args) 
    File "C:\Python33\Doc\Project\testing.py", line 21, in finish 
    var2=Entry.get(var1) 
    File "C:\Python33\lib\tkinter\__init__.py", line 2512, in get 
    return self.tk.call(self._w, 'get') 
AttributeError: 'NoneType' object has no attribute 'tk' 

回答

3

你需要Entry例如与它合作。

这样:

my_entry = Entry(top, bd=5) # you get object (Entry instance) 
my_entry.grid(row=7) # you call object method grid() 

entry_text = my_entry.get() # you call object method get() 

var = __import__(entry_text) 

BTW:

这样,你得到电网的结果()函数,而不是入门实例。

var1 = Entry(top, bd=5).grid(row=7) # grid() returns always None 

看到

my_entry = Entry(top, bd=5) 
grid_result = my_entry.grid(row=7) # grid() returns always None 
var1 = grid_result 

在此代码尝试包()进口图书馆:)

var1 = __import__(tkinter.Entry(top, bd=5)).pack() 

看到

my_entry = Entry(top, bd=5) # you get object 
imported_library = __import__(my_entry) # object can't be argument for __import__ 
var1 = imported_library.pack() # you can't pack library 
+0

你应该mentio ñ你写的代码不起作用。您可能想提及导入需要完成以响应按钮点击,按回车等事件。如果在创建小部件后立即调用.get(),您将始终获得空字符串。我知道这很明显,但它可能不是OP。 –

+0

我迷惑了我的其他理论,以了解需要一个按钮(或其他方法),但谢谢。我现在没有时间来尝试这个,但只要我这样做,我会分享结果。谢谢! – Matt

+0

谢谢,效果很好。起初我遇到了一个问题,在导入的模块中寻找一个变量,然后我意识到我很愚蠢。奇迹般有效。 – Matt