我已经完成了所有设置,我无法弄清楚如何在Tkinter文本小部件中交换2行。它已被其他小部件禁用和填充,因此我使用3个按钮为禁用/未聚焦的文本小部件提供了一些功能; Move_Up,Move_Down和Delete。我删除了工作,但无法弄清楚如何让其他两个工作。现在我正在使用2个值来引用要修改的文本行的开头和结尾:self.line_start
和self.line_end
到目前为止,这就是我所拥有的:
def Move_Up(self):
self.TextWidg.config(state='normal')
#swap this line with the line above it
self.TextWidg.config(state='disabled')
def Move_Down(self):
self.TextWidg.config(state='normal')
#swap this line with the line below it
self.TextWidg.config(state='disabled')
def Delete(self):
self.TextWidg.config(state='normal')
#delete the line
self.TextWidg.delete(self.line_start,self.line_end)
#delete the carriage return
self.TextWidg.delete(self.line_start)
self.TextWidg.config(state='disabled')
基本上,我如何实现self.line_start
和self.line_end
的值来将线与之前的线或后面的线交换。
答案 0 :(得分:2)
根据Bryan的建议,我能够解决Move_Up()和Move_Down()方法,如下所示。它在Mac OS X上使用Python 3.1.3或2.6.6。
#swap this line with the line above it
def Move_Up():
text.config(state='normal')
# get text on current and previous lines
lineText = text.get("insert linestart", "insert lineend")
prevLineText = text.get("insert linestart -1 line", "insert -1 line lineend")
# delete the old lines
text.delete("insert linestart -1 line", "insert -1 line lineend")
text.delete("insert linestart", "insert lineend")
# insert lines in swapped order
text.insert("insert linestart -1 line", lineText)
text.insert("insert linestart", prevLineText)
#text.config(state='disabled')
#swap this line with the line below it
def Move_Down():
text.config(state='normal')
# get text on current and next lines
lineText = text.get("insert linestart", "insert lineend")
nextLineText = text.get("insert +1 line linestart", "insert +1 line lineend")
# delete text on current and next lines
text.delete("insert linestart", "insert lineend")
text.delete("insert +1 line linestart", "insert +1 line lineend")
# insert text in swapped order
text.insert("insert linestart", nextLineText)
text.insert("insert linestart + 1 line", lineText)
#text.config(state='disabled')
编辑:请注意,如果只有一行文字Move_Up()
,则会将该文字附加到该行。如果只有一行,Move_Down()
什么都不做。
答案 1 :(得分:1)
您可以使用index
方法获取窗口小部件中任何位置的索引。您可以为其提供包含linestart
和lineend
等修饰符的参数。您还可以使用+1c
获取相对位置的索引以获取下一个字符的索引,或获取下一行的+1l
。您还可以使用wordstart
和wordend
。您可以将它们组合起来,例如:index("insert lineend +1c")
例如,要获取具有插入光标的行的开头和结尾(其中'insert'是表示插入光标的标记的名称):
start = self.TextWidg("insert linestart")
end = self.TextWidg("insert lineend")
有关详细信息,请参阅text widget page on effbot.org上标题为“表达式”的部分。
答案 2 :(得分:0)
text.delete("插入 linestart +0 line","insert +0 line lineend") 下移删除