【问题标题】:Tkinter - Unusual behavior of Text widgetTkinter - 文本小部件的异常行为
【发布时间】:2020-08-26 04:53:26
【问题描述】:

我试图在单击按钮或在Text 中的键盘快捷键之后插入"(),",然后将光标移动到括号中,例如(|),。这是代码的相关部分。

def addParentheses(event = None):
    key_text.focus_set()
    key_text.insert('current', '(),')
    pos = key_text.index('current')
    col = int(pos.split('.')[0])
    row = int(pos.split('.')[1])
    key_text.mark_set('insert', "%d.%d" % (col,row-2))

只有当我的鼠标指针悬停在Text 小部件上时,此代码才能按预期工作。如果我的指针在Frame 的其他位置,它会在行首而不是行尾插入"(),"。 任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x tkinter tkinter-text


    【解决方案1】:

    我认为可能有两个问题。首先,“当前”是指鼠标的位置,而不是插入光标。目前尚不清楚这是否是您真正打算使用的。当鼠标不直接在小部件上时,索引将指鼠标在离开小部件边界之前在小部件上的最后位置。

    行为应该是,如果您将鼠标移到右侧的文本小部件之外,则文本将插入到靠近鼠标越过边缘的行尾。如果将鼠标移到左侧文本之外,文本将插入到最靠近鼠标越过边缘的行的开头。

    其次,您没有正确计算行和列。您将列设置为索引的第一部分,将行设置为第二部分。你把它反过来了。 “。”之前的第一部分。代表行号,“.”后面的第二部分表示列号。

    你需要像这样计算行和字符:

    pos = key_text.index('current')
    line = int(pos.split('.')[0])
    char = int(pos.split('.')[1])
    key_text.mark_set('insert', "%d.%d" % (line,char-2))
    

    【讨论】:

    • 非常感谢您澄清这一点!我刚刚意识到,我期望使用同一个命令会发生 2 种截然不同的事情,我已经制定了一个逻辑,现在它工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2017-05-28
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    相关资源
    最近更新 更多