python - 使 tkinter.Entry 只读但不灰显
问题描述
我喜欢默认 tkinter entry-widget 的外观,但我想让它成为只读而不是灰显。
import tkinter as tk
root = tk.Tk()
entry1_var = tk.StringVar(root, value='Entry1')
entry1 = tk.Entry(root, textvariable=entry1_var)
entry1.configure(state='disabled')
#entry1.configure(background="white") does nothing
entry1.grid()
root.mainloop()
我可以更改条目的样式还是应该尝试使标签看起来像默认条目?
编辑
此外,是否可以在只读/禁用时保持条目的文本可选?
解决方案
当条目被禁用时,背景和前景有一个特殊选项:disabledbackground
和disabledforeground
. 因此,要使禁用条目看起来更像常规条目,您可以使用:
entry1.configure(disabledbackground="white", disabledforeground="black")
为了仍然能够选择文本,您可以使用不同的策略。不要将状态设置为禁用,而是使用validatecommand
禁止所有编辑:
import tkinter as tk
def validate():
return False
root = tk.Tk()
vcmd = (root.register(validate))
entry1_var = tk.StringVar(root, value='Entry1')
entry1 = tk.Entry(root, textvariable=entry1_var, validatecommand=vcmd)
entry1.update()
entry1.configure(validate="key")
entry1.grid()
root.mainloop()
唯一需要注意的是,当您强制进行验证不应允许的编辑时,entry1_var.set('text')
例如,通过使用验证将被禁用(这也是我们需要entry1.update()
在开始验证之前主动设置文本的原因)。因此,要更改文本,您需要禁用验证,更新文本并重新启用验证,例如:
entry1.configure(validate="none")
entry1_var.set("text")
entry1.configure(validate="key")
推荐阅读
- mongodb - 在不聚合的查找查询中获取 Mongo _id 作为字符串而不是 ObjectId
- java - 404 未找到 Tomcat 的 Spring Boot 战争
- c# - MVC 获取异常指定的强制转换无效
- mysql - SQL将doublon ID行合并为具有更多列的唯一行
- c# - 将数据(复杂数据/原始数据)发送到服务并获取响应(复杂数据/原始数据)的最佳方式(WCF 或 WEB API)
- git - 从命令行清除 Jupyter 笔记本的输出单元
- ocr - Tesseract 无法识别德语“für”
- c++ - 如何从函数创建和返回字符串?
- angular - 如何检测角度模板中是否发生错误?
- matlab - MATLAB Simulink 模型配置参数:空窗口