【发布时间】:2015-04-02 14:31:44
【问题描述】:
我希望这是我忽略的东西,因为我对 Python 还很陌生,但我就是想不通。我有一个带有菜单的根窗口。当用户选择 Open Project 时,会创建一个顶层来显示数据,将数据从文件加载到字典中,并加载到 Entry 小部件中以向用户显示数据。一切正常。 “标题”显示在左侧,条目文本区域显示在右侧,并加载了相应的文本。
但是,此时我无法编辑数据。单击任何条目文本不会执行任何操作。除非我切换到根窗口,然后再回到顶层。然后我可以编辑数据。
我希望能够立即编辑数据,然后单击“更新”按钮重新保存数据并更新字典。
我在 Windows 8.1 上使用 Python 3.4。
以下是相关代码:
def displayData(self):
tk = __import__("tkinter")
self.projectStrVars = {} # list of the StrVariables used for the Entry widgets
# create the frame to hold the labels and entry widgets
dataFrame = tk.LabelFrame(self.projectWin, width=800, height=458, text="Project Data: ")
dataFrame.grid(row=0, column=0, columnspan=2, sticky='WE', padx=5, pady=5, ipadx=5, ipady=5)
# populate the form Labels and Entry widgets with the data in self.projectData
for index in range(self.numFields):
key = self.formFields[index]
value = self.projectData[key]
tk.Label(dataFrame, text=key).grid(row = index+1, column = 0)
self.projectStrVars[index] = tk.StringVar()
self.entry = tk.Entry(dataFrame, textvariable = self.projectStrVars[index])
self.entry.grid(row = index+1, column = 1)
self.entry.insert(index, value)
updateButton = tk.Button(dataFrame, text="Update", command=self.storeNewProjectData)
updateButton.grid(row=20, column=0, columnspan=2)
【问题讨论】:
-
听起来是个有趣的问题 :-) 不幸的是,如果没有 MCVE,我无法正确调查。
-
为什么要使用
__import__导入 tkinter? -
@BryanOakley 我在搜索将模块导入函数的方法时发现了该代码。我只是将其更改为“将 tkinter 作为 tk 导入”,因为这似乎更标准。而且效果很好,所以我想这才是最重要的。
-
基本上,我想弄清楚为什么我不能更改文本,直到我 alt-tab 到根窗口,然后回到顶层。如果我尝试突出显示其中一个条目小部件中的文本,它甚至不会突出显示。但是如果我切换到根窗口,然后再返回,它会突然像一开始那样突出显示。
-
我自己在尝试填充根窗口并在班级的
__init__()中弹出messagebox时遇到了同样的问题。为了解决这个问题,我将messagebox调用移动到单独的辅助函数中,并使用after()(例如self.parent.after(1, make_message))调用这些函数。查看您的程序并尝试注释掉行,直到找到罪魁祸首,然后将它所做的任何事情放入一个辅助函数并使用after()调用它。如果没有 MCVE,我无能为力。