【问题标题】:Module Import from tkinter Widget从 tkinter 小部件导入模块
【发布时间】:2013-12-11 05:07:16
【问题描述】:

不久前,我问了一个关于如何从输入语句中导入的问题。搞定了。现在,我正在将冗长的代码升级为用户的 GUI。同样的问题。如何根据来自 tkinter 小部件条目的用户输入导入模块。 我原来有:

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'

【问题讨论】:

    标签: python-3.x tkinter python-import


    【解决方案1】:

    您需要Entry instance 才能使用它。

    这边:

    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)
    

    顺便说一句:

    这样你得到的是 grid() 函数的结果,而不是 Entry 实例。

    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
    

    【讨论】:

    • 你应该提到你的代码,按照写的,不会工作。您可能想提到导入需要响应诸如按钮单击、按下回车等事件来完成。如果您在创建小部件后立即调用 .get() ,您将始终得到空字符串。我知道这对你来说很明显,但对 OP 来说可能不是。
    • 我用我的其他理论搞砸了足够多的了解按钮(或其他方法)的需要,但谢谢。我现在没有时间尝试这个,但是一旦我这样做了,我会分享结果。谢谢!
    • 谢谢,效果很好。起初我在处理导入模块中的变量时遇到了问题,然后我意识到我很愚蠢。像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多