我正在Windows 7的Python 2.7中使用Tkinter,发现需要创建带有树型复选框列表的弹出框。我在Tkinter或ttk中找不到此文件。但是,我确实在Tix的CheckList小部件中找到它。我有一个使用Tix的独立示例,但无法弄清楚如何将Tix.CheckList添加到控制主程序的ttk.Frame中。
当然,我不会被迫完全使用Tix框架吗?
import Tix
import pandas as pd
import Tkinter as tk
class TreeCheckList(object):
def __init__(self, root):
self.root = root
self.cl = Tix.CheckList(self.root)
self.cl.pack(fill=Tix.BOTH, expand=Tix.YES)
self.cl.hlist.config(bg='white', bd=0, selectmode='none', selectbackground='white', selectforeground='black', drawbranch=True, pady=5)
self.cl.hlist.add('ALL', text='All Messages')
self.cl.hlist.add('ALL.First', text='First')
self.cl.setstatus('ALL.First', "off")
self.cl.hlist.add('ALL.Second', text='Second')
self.cl.setstatus('ALL.Second', "off")
self.cl.autosetmode()
def main():
root = Tix.Tk()
top = Tix.Toplevel(root)
checklist = TreeCheckList(top)
root.update()
top.tkraise()
root.mainloop()
if __name__ == '__main__':
main()
上面的代码在使用所有Tix小部件的独立程序中均可工作。但是,当我尝试将其实现到较大的程序中时,会收到
TclError: invalid command name "tixCheckList"
为了在独立环境中进行模拟,我更改了以下行:
root = Tix.Tk()
top = Tix.Toplevel(root)
至
root = tk.Tk()
top = tk.Toplevel(root)
我希望我可以实现Tix.Toplevel,将其放置在tk.Tk()根目录上,但还是同样的问题。
使用Tix小部件时是否只能使用Tix框架,还是我误会了某些东西?如果有人拥有良好的Tix文档,我将爱得到的一切。似乎关于它的优秀文档很少而且相差甚远。还是ttk中包含了相同的功能,而我只是忽略了它?这似乎是唯一遗漏的事情之一。
最佳答案
我刚刚了解到,显然只有root
是Tix类。由于Tk和ttk类似乎都可以很好地添加到Tix根目录中(因为它们中的大多数都会扩展Tkinter类),因此这似乎是一个“解决方案”。所以我的问题可能已经解决了root = tk.Tk()
至root = Tix.Tk()
这确实要求我将Tix放入我不希望出于封装目的的程序的一部分,但是我想没有其他方法。