小编典典

创建一个看起来像Tkinter的表

python

我希望在Tkinter中创建类似于表的内容,但不一定必须是一个表。

我想例如创建标题“ Name1”,“ Name2”,“ Value”,并且在每个标题下方我希望有几行空白。

然后,我希望稍后使用我计算出的值或名称的字符串值填写这些行(因此称为Label)。

对于“ Name2”,我实际上希望整个列都为一个下拉菜单。我已经自己创建了一个代码,但不确定如何将其合并到此“表”中。

例如,是否可以在Label小部件周围创建边框,使其看起来像“表格”?

任何指向在这种情况下可能发生的情况的指针将不胜感激。如果您需要我的任何代码来解决问题,请询问。谢谢!


阅读 203

收藏
2020-12-20

共1个答案

小编典典

你有什么问题?简单的解决方案是使用布置小部件grid。您可以在每个单元格中放入所需的任何类型的小部件。是的,标签可以有边框。不过,做网格线的一种简单方法是在每个单元格周围使用填充,以使框架的颜色通过间隙显示出来。

在框架中执行此操作。如果需要滚动表,请将框架放在画布中并添加滚动条。网上有一些示例,介绍如何使用画布创建可滚动框架。

这是一个非常简单的示例,它仅使用标签,并且不会滚动。我将把您需要的确切实现留给读者练习。

import Tkinter as tk

class ExampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        t = SimpleTable(self, 10,2)
        t.pack(side="top", fill="x")
        t.set(0,0,"Hello, world")

class SimpleTable(tk.Frame):
    def __init__(self, parent, rows=10, columns=2):
        # use black background so it "peeks through" to 
        # form grid lines
        tk.Frame.__init__(self, parent, background="black")
        self._widgets = []
        for row in range(rows):
            current_row = []
            for column in range(columns):
                label = tk.Label(self, text="%s/%s" % (row, column), 
                                 borderwidth=0, width=10)
                label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
                current_row.append(label)
            self._widgets.append(current_row)

        for column in range(columns):
            self.grid_columnconfigure(column, weight=1)


    def set(self, row, column, value):
        widget = self._widgets[row][column]
        widget.configure(text=value)

if __name__ == "__main__":
    app = ExampleApp()
    app.mainloop()
2020-12-20