I want to make a label that keeps counting how many times the user typed a certain word(in this case “1r#”) in a ScrolledText without needing to make a button to update the label. Can I make a loop? If so, how could I do it?
from tkinter import *
from tkinter import scrolledtext
root = Tk()
dataFrame = Frame(root)
recFrame = Frame(root)
dataLabel = Label(root, text="Dados").grid(column=0, row=0)
dataInput = scrolledtext.ScrolledText(root, width=3, height=10)
dataInput.grid(column=0, row=1)
dataFrame.grid(column=0)
# Counts how many times the text appears
dataText = dataInput.get("1.0", "end-1c")
label = Label(recFrame, text=dataText)
labelCount = label['text'].count("1r#")
recPeTitle = Label(recFrame, text="P", width=3)
recPeTitle.grid(column=0,row=1)
# Here is where I want to "print" the count on a Label
recPe1 = Label(recFrame, text=labelCount)
recPe1.grid(column=0, row=2)
recFrame.grid(column=1, row=1, sticky=NW)
root.mainloop()
Every word the program will look for are three characters long, if it helps.
Advertisement
Answer
You don’t need another loop. Simply, bind <KeyPress> to a function then update the count.
See the example below:
from tkinter import *
from tkinter import scrolledtext
def update(event):
dataText = dataInput.get("1.0", "end-1c")
labelCount = dataText.count("1r#")
recPe1.config(text=labelCount)
root = Tk()
dataFrame = Frame(root)
recFrame = Frame(root)
dataLabel = Label(root, text="Dados").grid(column=0, row=0)
dataInput = scrolledtext.ScrolledText(root, width=3, height=10)
dataInput.bind("<KeyPress>", update)
dataInput.grid(column=0, row=1)
dataFrame.grid(column=0)
recPeTitle = Label(recFrame, text="P", width=3)
recPeTitle.grid(column=0,row=1)
# Here is where I want to "print" the count on a Label
recPe1 = Label(recFrame, text='0')
recPe1.grid(column=0, row=2)
recFrame.grid(column=1, row=1, sticky=NW)
root.mainloop()