gpt4 book ai didi

python - 如何设置 Margin 或 Offset 标签?

转载 作者:太空宇宙 更新时间:2023-11-03 15:47:18 25 4
gpt4 key购买 nike

我试图在我的文本小部件中添加一个小的自动边距,但是我在编写标签时遇到了困难。

我有一个文本框,我试图在保持边距的情况下将文本插入该框。

我可以让插入的文本有边距,但是当我输入超过最后一行时,边距消失了。到目前为止,我所能挖掘的只是如何编写标签并将其与 insert() 一起使用,但我想始终保持边距。

问题:有没有办法保持所有行的边距,而不仅仅是从文件或字符串中插入的行?

请注意,同样的问题扩展到 Offset 标签,因为我在插入文本后输入时遇到了同样的问题。

这是我在 Minimal, Complete, and Verifiable example 中尝试过的示例。

import tkinter as tk


root = tk.Tk()

text = tk.Text(root, width = 10, height = 10)
text.pack()

text.tag_configure("marg", lmargin1 = 10, lmargin2 = 10)
text.insert("end", "Some random text!", ("marg"))

root.mainloop()

enter image description here

最佳答案

不幸的是,在小部件的开头和结尾添加和删除文本的边缘情况使得使用标签变得困难。

如果您的目标是保持边距,一种解决方案是为文本小部件创建代理,以便您可以拦截所有插入和删除,并始终在每次小部件内容更改时添加边距。

例如,从生成 <<TextModified>> 的自定义小部件开始每当小部件被修改时的事件:

class CustomText(tk.Text):
def __init__(self, *args, **kwargs):
tk.Text.__init__(self, *args, **kwargs)

# create a proxy for the underlying widget
self._orig = self._w + "_orig"
self.tk.call("rename", self._w, self._orig)
self.tk.createcommand(self._w, self._proxy)

def _proxy(self, command, *args):
cmd = (self._orig, command) + args
result = self.tk.call(cmd)

if command in ("insert", "delete", "replace"):
self.event_generate("<<TextModified>>")

return result

(参见 https://stackoverflow.com/a/40618152/7432)

接下来,修改您的程序以使用此代理来强制边距标记始终应用于整个内容:

def add_margin(event):
event.widget.tag_add("marg", "1.0", "end")

text = CustomText(root, width = 10, height = 6)
text.bind("<<TextModified>>", add_margin)

关于python - 如何设置 Margin 或 Offset 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49262065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com