簡體   English   中英

Python tkinter 文本小部件刪除 function 無法正常工作

[英]Python tkinter text widget delete function doesn't work correctly

我正在創建一個計算器應用程序,我向它添加了這個反斜杠按鈕,這里是數字按鈕的 function: 在此處輸入圖像描述

它工作正常,當我按下一個數字時,它只是將它添加到當前數字的末尾。 這是其中一個按鈕: 在此處輸入圖像描述

所以我創建了反斜杠 function 這是: 在此處輸入圖像描述

但是當我按下它時,它會從頭開始刪除數字。 例如,我們有這個數字:76543,如果我單擊反斜杠,它會刪除 7 而不是 3,它看起來像:6543。我試過 entt.delete(-1.0)、entt.delete(END)、entt.delete( END,END) 但沒有一個有效。 你們知道任何解決方案嗎?

delete方法的第一個參數必須是要刪除的字符之前的索引。 如果要刪除緊接插入cursor之前的字符,可以使用索引"insert-1c" (插入點,減去一個字符)。

entt.delete("insert-1c")

對於這種情況,文本小部件不是一個很好的小部件。 但是,對於您需要的內容,您可以使用標准子字符串來完成相同的工作。

def back_slash_click():
    txt = entt.get('1.0', END)
    entt.delete('1.0', END)
    end.insert('1.0', txt[:-2])

注意:文本小部件會自動將“ \n ”添加到 get() 的末尾,這就是我從 txt 中刪除 2 個字符的原因。

Text.index(END) 由於自動添加的 ' \n ',總是返回行數 +1

更好的答案

索引的數字是 line.character:可以不刪除並重新插入文本,但您需要獲取文本,計算行數和最后一行中的字符數,然后從最后一行中減去 2字符數

您可以使用ind = int(widget.index(END))-1輕松找到最后一行並獲取最后一行並使用len(widget.get(ind, END))獲取字符數

這可以用在這個 function 中來做同樣的工作。

def delete_last_char(widget):
    ind = float(widget.index(END))-1.0 ##get the last line
    txt = len(widget.get(ind, END))-2 ##get the character count and -2
    rmv = float(f'{int(ind)}.{txt}') ## format this into an accepted float
    widget.delete(rmv, END) ##delete that index range from the widget

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM