0

我是 Tkinter 的新手,并且编写了一个程序来打开文件并解析二进制消息。

我正在努力如何最好地显示结果。我的解析类将有 300 多个条目,我想要类似于表格的东西。

var1Label : var1Val

var2Label : var2Val

我玩过这些小部件,但没有得到任何我可以引以为豪的东西:标签、文本、消息,可能还有其他。

所以我希望标签是右对齐,而 Var 是左对齐,或者其他任何关于如何使它成为一个有吸引力的显示的好主意,比如让所有的 ':' 对齐。Var 的大小在 0-15 个字符之间。

我在 Windows 上使用 python 2.7.2。

这是我尝试使用虚拟变量的网格方法

self.lbVar1 = Label(self.pnDetails1, text="Var Desc:", justify=RIGHT, bd=1)
self.lbVar1.grid(sticky=N+W)
self.sVar1 = StringVar( value = self.binaryParseClass.Var1 )
self.Var1  = Label(self.pnDetails1, textvariable=self.sVar1)
self.Var1.grid(row=0, column=1, sticky=N+E)
4

1 回答 1

0

ttk.Treeview部件允许您创建具有多列的对象列表。它可能是您最容易使用的东西。

由于您特别询问了标签网格,这里有一个快速而肮脏的示例,展示了如何在可滚动网格中创建 300 个项目:

import Tkinter as tk
class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        # create a canvas to act as a scrollable container for
        # the widgets
        self.container = tk.Canvas(self)
        self.vsb = tk.Scrollbar(self, orient="vertical", command=self.container.yview)
        self.container.configure(yscrollcommand=self.vsb.set)
        self.vsb.pack(side="right", fill="y")
        self.container.pack(side="left", fill="both", expand=True)

        # the frame will contain the grid of labels and values
        self.frame = tk.Frame(self)
        self.container.create_window(0,0, anchor="nw", window=self.frame)

        self.vars = []
        for i in range(1,301):
            self.vars.append(tk.StringVar(value="This is the value for item %s" % i))
            label = tk.Label(self.frame, text="Item %s:" % i, width=12, anchor="e")
            value = tk.Label(self.frame, textvariable=self.vars[-1], anchor="w")
            label.grid(row=i, column=0, sticky="e")
            value.grid(row=i, column=1, sticky="ew")

        # have the second column expand to take any extra width
        self.frame.grid_columnconfigure(1, weight=1)

        # Let the display draw itself, the configure the scroll region
        # so that the scrollbars are the proper height
        self.update_idletasks()
        self.container.configure(scrollregion=self.container.bbox("all"))

if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()
于 2012-09-26T14:52:26.913 回答