#python #tkinter
Вопрос:
Я хочу создать метку, которая будет подсчитывать, сколько раз пользователь вводил определенное слово(в данном случае «1r#») в прокручиваемом тексте без необходимости нажимать кнопку для обновления метки. Могу ли я сделать петлю? Если да, то как я мог это сделать?
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()
Каждое слово, которое программа будет искать, состоит из трех символов, если это поможет.
Ответ №1:
Вам не нужна еще одна петля. Просто свяжитесь <KeyPress>
с функцией, а затем обновите счетчик.
Смотрите пример ниже:
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()
Комментарии:
1. спасибо, но если мне нужно обновить более одной метки, нужно ли мне одно количество меток для каждой отдельной метки или есть способ обновить весь кадр?
2. @dkol если все ваши метки должны быть одинаковыми, то нет необходимости в нескольких метках, которые вы можете использовать одинаково. Если у вас есть что-то еще, что нужно обновить, поместите это в функцию обновления, и она обновит все.