2013-12-11 147 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