tkinter选项除了类似于,但除了" insert-1c"

时间:2014-04-29 22:43:30

标签: python-3.x tkinter

你知道在Tkinter中,你可以做这样的事情:

self.scrolled_text.replace("insert-1c", INSERT, myText);

它会用myText替换当前位置左边的字符吗?

那么,你可以用什么来代替" insert-1c"记录?

我知道-1c意味着减去一个角色。你可以做-2c表示减2,或+ 5c表示加5个字符。我只知道这是因为我在Google上花了一些时间后检查了某人的代码(不是因为我找到了文档)。

还有更多要知道,或者是它?无论如何,我喜欢能够在不进行搜索和查找空白的情况下用文字代替字符。对于像这样的东西,他们应该有一个文档维基。


编辑:我实际上为Tkinter找到了一个以上的wiki,其中一个对此有点讨论,具有讽刺意味。还有一个官方的python.org(虽然我不知道其中任何一个是讨论这个特定主题的那个):


编辑:由于我得到了答案,我将分享一些我学到的可以帮助某些人的事情。如果你想进行比较,ScrolledText.get(index1, index2)非常重要。 ScrolledText.index(INSERT)将返回INSERT的行和列,正如Bryan Oakley在他的回答中用不同的词语说的那样(例如,对于第1行,第0列或文件的开头,"1.0")。

EDIT2:ScrolledText.compare(index1, "==", index2)用于比较的代码较少,正如人们可能想象的那样。我当时并不知道这件事。

这里是我编写的用于模拟控制退格和控制删除功能的代码。

控制删除(self.cur_scroll()是我的ScrolledText小部件; "  "包含空格和不间断空格):

insert=self.cur_scroll().get(INSERT);
if insert in "  " and insert!="":
    while insert in "  " and insert!="":
        self.cur_scroll().delete(INSERT);
        insert=self.cur_scroll().get(INSERT);
elif insert not in "\n\t  .?!,@#…¿/\\\"'—–":
    while insert not in "\n\t  .?!,@#…¿/\\\"'—–":
        self.cur_scroll().delete(INSERT);
        insert=self.cur_scroll().get(INSERT);
    if insert in "  ":
        while insert in "  " and insert!="":
            self.cur_scroll().delete(INSERT);
            insert=self.cur_scroll().get(INSERT);
else:
    if insert in "\n\t" and insert!="":
        if self.cur_scroll().get(INSERT, END).strip()=="" and self.cur_scroll().index(INSERT)!=self.cur_scroll().index(END):
            self.cur_scroll().delete(INSERT, END);
        else:
            while insert in "\n\t  " and insert!="":
                self.cur_scroll().delete(INSERT);
                insert=self.cur_scroll().get(INSERT);
    else:
        self.cur_scroll().delete(INSERT);

控制-退格:

if self.cur_scroll().index("insert-1c")!="1.0" and self.cur_scroll().index(INSERT)!="1.0":
    if self.cur_scroll().index("insert wordstart-1c")=="1.0":
        i=0;
        while self.cur_scroll().index(INSERT)!="1.0" and i<25:
            self.cur_scroll().delete("insert-1c");
            i+=1;
    else:
        insertm1c=self.cur_scroll().get("insert-1c");
        if insertm1c in "\n\t.?!,@#…¿/\\\"'—–" and insertm1c!="":
            i=0;
            while (insertm1c in "\n\t.?!,@#…¿/\\\"'—–" and insertm1c!="") and i<25:
                self.cur_scroll().delete("insert-1c");
                insertm1c=self.cur_scroll().get("insert-1c");
                i+=1;
        else:
            while insertm1c not in "\n\t  .?!,@#…¿/\\\"'—–" and insertm1c!="":
                self.cur_scroll().delete("insert-1c");
                insertm1c=self.cur_scroll().get("insert-1c");
            while insertm1c in "  " and insertm1c!="":
                self.cur_scroll().delete("insert-1c");
                insertm1c=self.cur_scroll().get("insert-1c");

2 个答案:

答案 0 :(得分:3)

请参阅此页面的“索引”部分:http://effbot.org/tkinterbook/text.htm。最终文档在此处:http://tcl.tk/man/tcl8.5/TkCmd/text.htm#M7

简短的回答是,您可以添加"line.char"形式的任何索引和特殊值"end"。您可以使用-1c(“减去一个字符”)和"wordend"以及其他几个内容来修改这些内容。您还可以使用标记,例如名为"insert"的内置标记。

答案 1 :(得分:1)

总会有更多。

您可以查看此处列出的参考资料: https://stackoverflow.com/tags/tkinter/info

这是官方文字文档: http://www.tcl.tk/man/tcl8.5/TkCmd/text.htm

要回答关于整个单词的问题,请考虑以下示例:

def replace():                                        # deletes whole word where insert
    text.delete('insert wordstart', 'insert wordend') # cursor is found

root=Tk()

text = Text(root)
text.pack()
text.insert(END, 'Hello world')

Button(root, text='Delete word', command=replace).pack()

root.mainloop()