【问题标题】:Need way to edit the text that is pre-loaded into a python tkinter Entry widget需要编辑预加载到 python tkinter Entry 小部件中的文本的方法
【发布时间】: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,我无能为力。

标签: python tkinter


【解决方案1】:

好的,我发现了问题。它归结为创建顶层的时间。我最初是在访问文件并将数据加载到字典之前调用它。无论出于何种原因,这阻止了顶层获得控制/焦点(无论它被称为什么),直到/除非我切换到根窗口然后再返回。

我对其进行了更改,以便在数据显示给用户之前创建顶层(在打开文件并将数据加载到字典之后)。效果很好。

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多