Python 3.x Tkinter和从文本小部件读取当前行
我有一个问题,我试图阅读当前行,因为我键入…问题是我得到的输出不是真正应该是什么 以下是目前该计划的结构 “按键”功能是问题所在的部分Python 3.x Tkinter和从文本小部件读取当前行,python-3.x,tkinter,Python 3.x,Tkinter,我有一个问题,我试图阅读当前行,因为我键入…问题是我得到的输出不是真正应该是什么 以下是目前该计划的结构 “按键”功能是问题所在的部分 from tkinter import * import keyword ### TEXT EDITOR WIDGET class TextEditor(Text): # TAGS tags = {"int": "red"} ### Init def __init__(self, root): Text.__init__(self, root)
from tkinter import *
import keyword
### TEXT EDITOR WIDGET
class TextEditor(Text):
# TAGS
tags = {"int": "red"}
### Init
def __init__(self, root):
Text.__init__(self, root)
self.bind("<Key>", self.key_press)
self.bind("<Button-1>", self.key_press)
### Add tags
def congif_tags(self):
for tag, val in self.tags.items():
self.tag_config(tag, foreground=val)
### Remove tags
def remove_tags(self, start, end):
for tag in self.tags.keys():
self.tag_remove(tag, start, end)
### On keyboard press event
def key_press(self, key):
current_line = self.index(INSERT)
current_line = current_line.split(".")
current_line = current_line[0]
line_break = 0
line_text = ""
char = self.get("%s.%d" % (current_line, line_break ))
while char != "\n":
line_break += 1
char = self.get("%s.%d" % (current_line, line_break))
line_text += char
print(line_text)
从tkinter导入*
导入关键字
###文本编辑器小部件
类文本编辑器(文本):
#标签
标记={“int”:“red”}
###初始化
定义初始化(自,根):
Text.\uuuu init\uuuu(self,root)
self.bind(“,self.key_按)
self.bind(“,self.key_按)
###添加标签
def congif_标签(自我):
对于标记,self.tags.items()中的val:
self.tag_config(tag,前台=val)
###删除标签
def移除_标签(自我、开始、结束):
对于self.tags.keys()中的标记:
self.tag\u移除(标记、开始、结束)
###关于键盘按键事件
按def键(自,键):
当前行=自索引(插入)
当前_线=当前_线。拆分(“.”)
当前_线=当前_线[0]
换行符=0
line_text=“”
char=self.get(“%s.%d”%(当前行,行中断))
而char!=“\n”:
换行符+=1
char=self.get(“%s.%d”%(当前行,行中断))
行\文本+=字符
打印(行\文本)
问题可能是由于您的绑定发生在Tkinter有机会处理事件之前。所以你总是落后一个按键。尝试将绑定添加到密钥版本。或者,您可以摆弄绑定标记,以安排在默认绑定之后启动绑定
有一点不相干:你似乎想得到这行的最后一个字符。对吗?您可以通过执行以下操作来获得整个线路:
line_text = self.index("insert linestart", "insert lineend")
“问题是,我得到的输出并不是我应该得到的……”。这永远是最好的解释。您是否愿意努力写下输出内容和收到的内容?谢谢您的帮助!我从未设法理解index()方法,但我确实做到了:line_text=self.get(“{a}.0.”format(a=current_line),END)