python - 在 tkinter 文本小部件中键入时在状态栏中显示字数
问题描述
我想制作一个简单的文本编辑器,在我输入时显示唯一单词的数量加上总字数。我尝试过使用t.get("1.0","end-1c")
,但我不知道如何进行交互(实时)。来自相关答案的玩具代码,其中“按键”功能尝试将文本小部件的内容打印到终端,是:
import tkinter as tk
class textEditor(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.textFrm = tk.Frame(self)
self.textFrm.pack(fill = "x")
self.text = tk.Text(self.textFrm, relief = "flat", font = ("Arial","11"))
self.text.pack(fill = "both", expand = True)
self.text.bind('<KeyRelease>', self.keyPress())
self.text.focus()
def keyPress(self):
words = self.text.get("1.0","end-1c")
print(words)
root = tk.Tk()
root.title("Text editor test")
t = textEditor(root)
t.pack()
root.mainloop()
解决方案
好的,当你bind
是一个函数时,不要调用它 - 不要使用()
这是一个有效的解决方案。每次按键都会更新状态栏
import tkinter as tk
class textEditor(tk.Frame):
def __init__(self, *args, **kwargs):
tk.Frame.__init__(self, *args, **kwargs)
self.textFrm = tk.Frame(self)
self.textFrm.pack(fill = "x")
self.text = tk.Text(self.textFrm, relief = "flat", font = ("Arial","11"))
self.text.pack(fill = "both", expand = True)
self.text.bind('<KeyRelease>', self.keyPress)
self.text.focus()
self.status_bar=tk.Entry(self)
self.status_bar.pack(fill = "x",side="top")
def keyPress(self,event):
words = self.text.get("1.0","end-1c")
self.status_bar.delete(0,"end")
self.status_bar.insert('end',words)
root = tk.Tk()
root.title("Text editor test")
t = textEditor(root)
t.pack()
root.mainloop()
推荐阅读
- javascript - 如何汇总和分组对象数据?
- django - 如何在 django 测试用例中添加自定义标头?
- powerbi - Power BI 计算上一个工作日的度量
- vue.js - Vue 组件检查 vuex 存储状态属性是否已填充数据
- java - 可见性设置为 GONE 时如何删除空白空间
- java - 如何在将文档转换为 pdf 时将 pTab 元素添加到 docx4j
- vue.js - 在 vuetify 模板中合并多个 v-slot:activator 和 v-on
- c - 使用模块定义文件 (.def) 导入 DLL
- python - 在pyplot的子图中格式化xtick标签和轴标签
- gradle - 无法解析 javax.inject:javax.inject:1.0 - Gradle