为什么Tkinter窗口在移动标题栏时会冻结,移动后它开始工作?

2024-09-27 09:24:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个窗口,通过单击按钮查询DB2数据库表,它将记录提取到我的窗口中。你知道吗

对于一些表,在我单击Query按钮之后,我可以在窗口中正确地获取记录。你知道吗

但对于许多其他表,单击“查询”按钮后,窗口将冻结。现在,当我用鼠标键移动窗口的标题栏时,窗口很快就会解冻,我可以正确地从数据库表中获取所有记录。你知道吗

我在Text小部件中显示每个记录字段。你知道吗

早些时候,当我使用Label小部件代替Text小部件时,我没有发现这个问题。你知道吗

我就是这样在运行时创建Text小部件的。你知道吗

fld_name = Text(self.response_frame, background='yellow', relief=GROOVE,
                        borderwidth=1, height=1)
val_text = str(ibm_db.field_name(result, i)) # I am getting the value from DB2 database here
fld_name.configure(width=len(val_text) + 5) # As the Text widget doesn't auto-resize, so I am configuring it's size.
fld_name.insert(1.0, val_text)
fld_name['state'] = 'disabled'
fld_name.grid(column=i, row=j, sticky=(W, E))

请建议。你知道吗

谢谢。你知道吗


Tags: thetextname数据库部件记录valquery
1条回答
网友
1楼 · 发布于 2024-09-27 09:24:23

您需要遵守将fld_name的状态从NORMAL插入或删除到DISABLED之前和之后正确更改的顺序(反之亦然)。你知道吗

这意味着您的插入操作必须如下所示:

fld_name.configure(state='normal')
fld_name.insert(1.0, val_text)
fld_name.configure(state='disabled')

但这仍然可能导致你不想要的行为,因为线fld_名称.配置(state='normal')假设您的fld\u名称处于相反的状态(DISABLED),如我在上面的介绍段落中所述。这意味着您将需要对代码执行最后一次修改,这与您创建fld_name的方式有关:

fld_name = Text(self.response_frame, state = 'disabled', background='yellow', relief=GROOVE,   borderwidth=1, height=1)

如您所见,您只需在创建时添加选项state = 'disabled',就可以遵守上面第一段的语句。你知道吗

因此,我们正在以连贯的顺序改变fld_name态:

DISABLEDNORMALDISABLED

请注意,如果在上述第fld_name.configure(state='disabled')行之后的fld_name中执行数据插入或删除操作,则需要将fld_name的状态完全恢复到NORMAL。始终尊重本答案第一段的陈述。你知道吗

相关问题 更多 >

    热门问题