tkinter对话框突出显示父条目文本

时间:2019-01-21 21:29:52

标签: python python-3.x tkinter tkinter-entry python-3.7

我正在尝试复制Python Idle的“搜索对话框”的行为,该对话框突出显示了后面的文本。因此,我参考此链接并创建自己的对话框:http://effbot.org/tkinterbook/tkinter-dialog-windows.htm

Python Idle Search Dialog

问题是使用 text"Register" 时,我无法突出显示调用该对话框的父窗口的文本。我不想删除self.grab_set(),因为我也不想让用户在搜索时四处点击。

正如我在对话框的其他实现中所测试的那样,按钮的onclick侦听器已正确执行。例如,使用替换对话框可以正确替换文本。因此,唯一的问题是父窗口中的Entry文本未突出显示/选中。实际上,如果我删除self.grab_set(),则可以突出显示文本。但是,对话框失去焦点,并且一旦执行此操作,焦点就会移至“父窗口的条目”。而且我无法按Enter来找到该对话框的下一个。

如何解决此问题?预先感谢!

My Implementation

---更新---

测试代码可以非常简单,如下所示。

self.grab_set()

1 个答案:

答案 0 :(得分:0)

输入小部件经过设计,因此只有一个小部件可以具有焦点,并且只有选中的小部件才可见。否则,将很容易创建一个UI,使用户无法知道键盘事件将流向何处或复制事件将被复制到何处。并非在所有平台上都适用,但自从我使用Mac以外的产品以来,已经有一段时间了。

如果您的系统允许多个条目窗口小部件显示一个选择,则可以通过确保将所有条目窗口小部件的exportselection选项设置为false来解决该问题。如果您要突出显示的小部件是Text小部件,那么就足够了。从您的问题尚不清楚,您是否真的需要搜索Text小部件或Entry小部件,这种区别很重要。

可以说,更好的解决方案是使用文本窗口小部件和您自己的自定义标签,而不是选择标签,因为您自己的标签没有这些限制。您可以使标签的外观与选择的外观相同,也可以使标签的外观不同,以便清楚地看到突出显示的代码的行为与用户手动选择的代码不同。