3

我在 Windows 7 上的 Python 2.7 中使用 Tkinter,发现需要创建一个带有树型复选框列表的弹出框。我在 Tkinter 或 ttk 中找不到这个。但是,我确实在 CheckList 小部件的 Tix 中找到了它。我有一个使用 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 中是否包含相同的功能而我只是忽略了它?它似乎是唯一被遗漏的东西之一。

4

1 回答 1

3

我刚刚了解到,显然只root需要成为一个 Tix 类。由于 Tk,因此 ttk,类似乎被添加到 Tix 根就好了(因为它们中的大多数无论如何都扩展了 Tkinter 类),这似乎是一个“修复”。所以我的问题可能已经通过改变来解决了

root = tk.Tk()

root = Tix.Tk()

这确实需要我将 Tix 拉入我不想要用于封装目的的程序的一部分,但我想没有其他方法。

于 2017-12-06T15:25:22.603 回答