【发布时间】:2021-12-10 19:09:21
【问题描述】:
我最近一直在开发一个 Tkinter (Python) 项目,该项目使用 Text 小部件显示字符串列表,但遇到了一个我无法解决的问题: 在启动时,我希望第一行突出显示,当我单击向上/向下箭头时,突出显示向上/向下,作为选择栏。 我成功地做到了,但问题是突出显示仅在按下箭头时出现,而当它们被释放时,它会消失。即使我不按任何键,我也希望它保持不变。
这是我的代码:
class Ui:
def __init__(self):
# the list I want to display in Text
self.repos = repos
# here is the entry keys are bind to
self.entry = Entry(root)
self.entry.pack()
self.bind('<Up>', lambda i: self.changeIndex(-1))
self.bind('<Down>', lambda i: self.changeIndex(1))
# here is the Text widget
self.lists = Text(root, state=NORMAL)
self.lists.pack()
# inits Text value
for i in self.repos:
self.lists.insert('insert', i + '\n')
self.lists['state'] = DISABLED
# variable I use to navigate with highlight
self.index = 0
self.lists.tag_add('curr', str(self.index) + '.0', str(self.index + 1) + '.0') # added + '.0' to make it look '0.0' instead of '0'
self.lists.tag_config('curr', background='#70fffa', background='#000000')
self.root.mainloop()
def changeIndex(self, n):
# error gestion (if < 0 or > len(repos), return)
self.lists.tag_delete('curr')
self.lists.tag_add('curr', str(self.index) + '.0', str(self.index + 1) + '.0')
self.index = self.index + n
# to make it scroll if cannot see :
self.lists.see(str(self.index) + '.0')
我在 Stack 上没有看到任何类似的问题,所以我问了,但不要犹豫告诉我它是否是重复的。
你们能帮帮我吗?谢谢!
编辑:如果您想尝试一下,这是完整的代码:https://github.com/EvanKoe/stack_tkinter.git
编辑:我将 main.py 文件(调用 ui.py 的“”“后端”“”文件)添加到演示存储库。这样,您就可以运行项目(请注意,main.py 中有“YOUR TOKEN”和“YOUR ORGANIZATION”字符串,您必须使用自己的令牌/组织进行修改。我无法推送我的或 Github 会要求我删除我的令牌)
【问题讨论】:
-
您的代码无法运行,因为
Ui不是小部件,并且您在__init__()中调用了self.bind(...)。self.root也未定义。 -
Ofc 我定义了self.root、Ui 和你说的所有这些东西,我只是没有在这里输入它们以简化帖子。此外,代码运行良好(只是 UI/UX 改进)
-
如果没有minimal reproducible example,我们如何提供帮助?
-
我刚刚发布了一个包含完整文件的 github 链接 :)
-
您不应该使用
tag_delete(),因为它会删除与标签相关的所有内容,包括配置的颜色。请改用tag_remove()。
标签: python tkinter text tags highlight