簡體   English   中英

我無法在文本標簽-Tkinter 的文本中使用鍵盤滾動

[英]I can't scroll with the keyboard in the text of my Text tag -Tkinter

我基本上從文本小部件中刪除了不需要的字符,但是當我遇到換行符並嘗試使用鍵盤或鼠標滾動文本時,我就是做不到(它總是停留在同一個地方)。 這是在“驗證文本”方法中完成的


class NewNewsFrame(Frame):
    def __init__(self, parent):
        self.Parent = parent
        self.initializecomponents()
        pass

    def validate_text(self, widger):
        value = widger.get("1.0", "end-1c")
        print value.fon
        if not value.isalnum():
            var = str()
            for i in value:
                print(f"({i})")
                var += i if(i.isalpha() or i.isdigit() or i == "(" or i == ")" or i == " " or i == "," or i == "." or i == "\n")else ""
            widger.delete("1.0", "end-1c")
            widger.insert("end-1c", var)
        pass

    def initializecomponents(self):
        Frame.__init__(self, self.Parent)

        self.DescriptionLabel = Label(self)
        self.DescriptionBox = Text(self)

        # DescriptionLabel
        self.DescriptionLabel.config(text="Description of the news:",bg=self["bg"], fg="#FFFFFF", font="none 15",anchor="nw")
        self.DescriptionLabel.place(relwidth=1, relheight=0.1, relx=0, rely=0.11, anchor="nw")

        # DescriptionBox
        self.DescriptionBox.bind("<KeyPress>", lambda event: self.validate_text(self.DescriptionBox))
        self.DescriptionBox.bind("<FocusOut>", lambda event: self.validate_text(self.DescriptionBox))

        self.DescriptionBox.place(relheight=0.4, relwidth=1, relx=0, rely=0.16, anchor="nw")
    pass

我試圖找到鍵盤滾動的工作原理,但我仍然不知道該怎么做

問題是您每次按鍵都會刪除和恢復所有文本。 這會導致光標位置以破壞默認綁定的意外方式發生變化。

如果您想阻止輸入某些字符,有更好的方法。 如果您的驗證函數返回字符串“break”,則會阻止插入該字符。 您不必重新掃描整個內容或刪除和恢復文本,因為壞字符永遠不會首先輸入。

您的驗證函數可能如下所示:

def validate_text(self, event):
    if event.char.isalpha() or event.char.isdigit() or event.char in "() ,.\n":
        pass
    else:
        return "break"

接下來,將綁定簡化為如下所示。 Tkinter 會自動將event參數傳遞給函數。

self.DescriptionBox.bind("<KeyPress>", self.validate_text)

這將破壞您的<FocusOut>綁定,但我不確定是否需要它。

有關如何處理事件以及返回“break”的原因的更多信息,請參閱問題Basic query regarding bindtags in tkinter 的答案 該問題與Entry小部件有關,但所有小部件的概念都是相同的。

暫無
暫無

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

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