1. 如何使得一个 Text 只读,因为设置 state="disabled" 之后,代码中也无法插入和修改文本。
解决方案:
绑定键盘输入,取消所有的输入。
实现方式:
w = Tkinter.Text(master)
w.bind("<KeyPress>", lambda e : "break")
# 事件处理脚本返回 "break" 会中断后面的绑定,所以键盘输入不会被插入到文本框。
2. 如何删除 Tix.OptionMenu 中的子项目。
总是找不到如何得到 OptionMenu 的所有孩子的方法,Tix 官方文档提供的属性是 entries,但是实际上调用的时候却找不到(Tix8.4.3 for Win 32),下面是一种折衷的方法,需要命令的名称和标签有关联关系:
# 创建和使用
w = Tix.OptionMenu(master)
w.add_command("x", label="x")
w.add_command("y", label="y")
...
# 删除子项
w["disablecallback"] = True
try:
n = w.menu.index("end")
for i in range(n + 1):
name = w.menu.entrycget(i, "label")
w.delete(name)
except Exception, inst:
print inst
w["disablecallback"] = False
可以尝试直接调用 tk 的方法实现(下面的代码没有调试,只是说明思路):
names = w.tk.call(w, "entries")
for name in names.split():
w.delete(name)
3. 为一个文本创建多个视图
首先创建一个原始 Text
w = Tkinter.Text(master)
然后创建一个 peer,因为Tkinter不支持 peer,所以需要直接调用 tk.call,并且把新创建的 peer 单独放到一个 frame 里面。
frame = Tkinter.Frame(master)
name = frame.winfo_parent() + "." frame._winfo_name() + ".1"
w.tk.call(w, "peer", "create", name)
w.tk.call("grid", name, "-sticky", ”nesw")
然后就可以使用 frame 作为一个 Tkinter 中的控件来使用了,其中就包含着 Text 的另外一个 peer 视图,在两个视图里面都可以修改文本,但是其插入的光标位置可以不一样。
联系客服