回复:tkinter.Label 的wrapplength,来自 John Shipman 的 NM Tech 文档:“您可以通过将此选项设置为所需的数字来限制每行中的字符数。默认值 0 表示仅断行在换行符处。” 其他来源一致认为环绕长度的单位是字符。
下面的代码似乎打破了界限,就好像绕行长度的单位是像素,而不是字符。例如,如果我将 wraplength 设置为 10,标签将显示一列一两个字符宽的文本。如果我将 wraplength 设置为 20,则行的长度为 3 或 4 个字符。
在我的应用程序中,用户将为自定义表单创建自己的简单小部件,如果 wraplength 选项使用字符计数作为单位而不是它正在执行的任何操作,那就更好了。由于 NMTech 文档适用于 Tkinter 8.5,但 8.6 是我的 Python 3.5 附带的,也许这可以解释其中的差异,但我没有看到 8.6 的文档。
但理想情况下,行应在单词之间最近的间距处换行,且换行长度仅用作最大行长度。因此,如果用户无论如何都必须输入自己的 \n,则wrapplength 对我来说似乎毫无用处。
摘要:在 GUI 中,对于将为自己的简单小部件输入选项值的用户,1) 有没有办法让 Tkinter 接受换行长度单位的字符,2) 我可以让行在最近的空格处换行吗?包裹长度仅用作最大行长度,而不是绝对行长度?
感谢您提供任何解决方案或建议。
import tkinter as tk
root = tk.Tk()
sib = tk.Label(root, text='Give em hell Harry', wraplength=10)
sib.grid()
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我对Mitja Martini 的 Tkinter 自动完成条目有一些疑问。
我删除了不必要的代码并留下了原作者的评论。如果您输入的速度足够慢,以便在每个字符后突出显示,那么自动完成功能就可以正常工作,但是必须缓慢输入就无法达到自动完成功能的目的,因为节省的时间很少。用户将不得不观看闪烁的突出显示,或者如果他不想观看闪烁,则只需非常慢地键入。
为什么我不能快速打字而不突出显示所选内容并且光标重新定位到填充单词的末尾?结果是快速打字会将字符附加到完整单词的末尾。
如何解决这个问题?
“新的命中列表”是什么意思(有条件注释掉)。我想看一个简单的例子来说明它是如何工作的和/或为什么我不能直接删除这个条件。
“已知命中列表”是什么意思(已注释掉的部分)。这段代码中未知的命中列表的示例是什么,以便我可以看到正在工作的注释行?
import tkinter as tk
class AutocompleteEntry(tk.Entry):
def set_completion_list(self, completion_list):
self._completion_list = completion_list
self._hits = []
self._hit_index = 0
self.position = 0
self.bind('<KeyRelease>', self.handle_keyrelease)
def autocomplete(self):
# set position to end so selection starts where textentry ended
self.position = len(self.get())
# collect hits
_hits = []
for element in self._completion_list:
if element.lower().startswith(self.get().lower()):
_hits.append(element)
# if we have a new hit list, keep this in mind
# if _hits != self._hits: …Run Code Online (Sandbox Code Playgroud)