我正在尝试使用python tk库创建一个键盘。我正在运行Python 3.6.3版。
1)我的UI中有一个Text
小部件。当我按退格按钮时,我想删除Text
小部件中的最后一个字符。我也在保留Text
小部件中字符总数的计数。
到目前为止,我已经尝试过:
def back():
global char_count # contains total char count
text.delete(char_count)
我还尝试将最后一行调整为text.delete(char_count-1),认为索引计数可能是1(我不确定我的计数是否与Text小部件中的索引匹配)。上面的代码不会删除任何内容。
2)我还试图了解如何删除一系列文本。我已经在网上查了一下,我发现要删除整个文本内容,人们使用:
text.delete("1.0", tk.END)
这样可行,但如果我尝试另一种方法从第二个索引中删除所有内容,如下所示:没有任何反应:
text.delete("2.0", tk.END)
我想问一下从文本中删除最后一个字符或范围的正确方法是什么,假设要使用的索引是变量而不是硬编码,如" 2.0"上方。
答案 0 :(得分:3)
1)Text小部件始终确保小部件中的最后一个字符是换行符,因此您可以删除所需的字符,倒数第二个字符,如下所示:
def back():
text.delete('%s - 2c' % 'end')
无需跟踪“文本”小部件中的字符数。
完整的工作样本在这里:
import sys
if sys.version_info.major is 3:
import tkinter as tk
else:
import Tkinter as tk
def back():
text.delete('%s - 2c' % tk.END)
root = tk.Tk()
text = tk.Text(root)
text.pack()
tk.Button(root, text='Delete', command = back).pack()
root.mainloop()
2)留意text.delete("2.0", tk.END)
。 " 2.0" 是第二行的开头。 Text小部件的索引具有不同的格式,但最简单的是文本字符串' X.Y',其中X是行号(从1开始),Y是列该行的编号(从0开始)。并且列不会总是对齐,因为制表符会占用一列但在“文本”小部件中看起来要宽得多。
您可以使用变量调用delete()方法,例如text.delete(startIndex, stopIndex)
。诀窍是确保索引有效。 ' 1.0'表示文本小部件中的第一个位置,并且'结束'代表最后一个。请查看http://effbot.org/tkinterbook/text.htm,了解Text小部件及其索引的工作原理。
有多种方法可以操作Text索引,但最常见的一些方法是使用text.index( arg )方法,它返回一个' X.Y'表示 arg ,以及nextpos = text.index('%s + 1 chars' % thispos)
格式,它允许您对索引进行基本数学运算。在这种情况下,它会将 nextpos 设置为下一列。但是' + 1'可以是正或负的任何数字,以及'字符'可以是' line'或者'单词'。它有很多东西。但是看看那个effbot.org页面。