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)