【发布时间】:2017-05-04 22:49:01
【问题描述】:
我正在尝试创建一个自定义文本输入框,该框在中心有一个文本输入字段,并且可以返回用户的输入。我特别想制作可以在其他程序中导入和重用的东西。我当前的迭代使用一个“inputdialog”类,当它在它自己的 .py 文件中时,它可以很好地获取输入,但是如果我尝试将模块导入另一个脚本,“ok”按钮似乎什么都不做,而“x ”按钮在关闭弹出窗口后抛出“ImportError: cannot import name 'inputdialog'”错误。
以下是我目前作为独立脚本运行的代码:
from tkinter import *
class inputdialog:
def __init__(self):
self.value = None
self.root = Tk()
self.root.withdraw()
self.top = Toplevel(self.root)
Label(self.top, text="Value").pack()
self.e = Entry(self.top)
self.e.pack(padx=5)
b = Button(self.top, text="OK", command=self.ok)
b.pack(pady=5, padx=5, side="right")
self.root.mainloop()
def ok(self):
self.value = self.e.get()
self.root.destroy()
if __name__ == "__main__":
test = inputdialog()
print(test.value)
以下是我将此模块导入另一个程序的方法,该程序目前不工作:
if __name__ == "__main__":
# These two lines below are needed to make sure that "askopenfilename"
# doesn't show it's top level tkinter window
root = Tk()
root.withdraw()
entdbemp = askopenfilename(title="Please select a file: ")
# Here is my non-working module call
master = inputdialog()
print(master.value)
为什么我的“确定”按钮在导入时会停止工作?有什么办法可以修复我的代码以允许导入它?有没有更好的方法来尝试使用 tkinter 制作可导入的文本输入模块?
【问题讨论】:
-
一个问题是您正在创建
Tk的两个实例。 Tkinter 被设计为只有一个Tk实例。