Tkinter和从Text小部件中读取当前行

时间:2015-08-12 06:17:12

标签: python-3.x tkinter

我有一个问题,我尝试在输入时读取当前行...问题是我得到的输出实际上不是它应该是什么......

以下是该计划的结构。

" KEY_PRESS"函数是问题依赖的部分。

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)

1 个答案:

答案 0 :(得分:2)

问题可能是由于您的绑定在Tkinter有机会处理事件之前发生。因此,你总是背后的一个关键点。尝试将绑定添加到密钥发布。或者,您可以使用绑定标记来安排绑定在默认绑定后触发。

稍微不相关的说明:你似乎试图获得该行的最后一个字符。那是对的吗?你可以通过这样的方式获得整条线:

line_text = self.index("insert linestart", "insert lineend")