python - 带有滚动条的 tkinter 表格显示

标签 python python-3.x tkinter

我正在用 python3/tkinter 编写一个小型 GUI。我想要做的是生成一个带有数据表(如电子表格)的窗口,并使该表可以水平和垂直滚动。现在我只是想显示数据,所以我使用的是标签网格。数据显示工作正常,但我无法让滚动条正确运行。这是我的代码的相关部分; this所在的类继承自tk.Toplevel

frame = self.frame = tk.Frame(self)
self.frame.grid(row=1, columnspan=2, padx=2, pady=2, sticky=tk.N+tk.E+tk.S+tk.W)

self.text_area = tk.Canvas(self.frame, background="black", width=400, height=500, scrollregion=(0,0,1200,800))
self.hscroll = tk.Scrollbar(self.frame, orient=tk.HORIZONTAL, command=self.text_area.xview)
self.vscroll = tk.Scrollbar(self.frame, orient=tk.VERTICAL, command=self.text_area.yview)
self.text_area['xscrollcommand'] = self.hscroll.set
self.text_area['yscrollcommand'] = self.vscroll.set

self.text_area.grid(row=0, column=0, sticky=tk.N+tk.S+tk.E+tk.W)
self.hscroll.grid(row=1, column=0, sticky=tk.E+tk.W)
self.vscroll.grid(row=0, column=1, sticky=tk.N+tk.S)

self._widgets = []

for row in range(rows):
    current_row = []
    for column in range(columns):
        label = tk.Label(self.text_area, text="", 
                         borderwidth=0, width=width)
        label.grid(row=row, column=column, sticky="nsew", padx=1, pady=1)
        current_row.append(label)
    self._widgets.append(current_row)

表格显示正常,滚动条出现但不起作用: enter image description here

有什么想法吗?

最佳答案

你有几个问题。首先,您不能使用 grid 将标签放置在 Canvas 中并期望它们滚动。当您滚动 Canvas 时,只有使用 create_window 添加的小部件会滚动。但是,您可以使用网格将标签放在框架中,然后使用 create_window 将框架添加到 Canvas 中。这个网站上有几个这种技术的例子。

其次,您需要告诉 Canvas , Canvas 中有多少数据应该是可滚动的。您可以通过设置 Canvas 的 scrollregion 属性来使用它。有一种方法 bbox 可以为您提供 Canvas 中所有数据的边界框。通常是这样使用的:

canvas.configure(scrollregion=canvas.bbox("all"))

关于python - 带有滚动条的 tkinter 表格显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17960207/

相关文章:

python - 带有列表的字典自定义相等性检查

python - 如何使用 Pandas 查找两个不同日期时间之间的最小值?

python - AttributeError: 图片没有属性 'open'

Python Tkinter 按钮回调

python - 如何获取Python中数据帧中数据列上关键字列表的出现次数

python - Django 管理员 : How to get all values from 2 models with same FK

python-3.x - 使用命令提示符在 Windows 10 专业版、python3.8.0 中安装 jupyter notebook 时遇到错误

python - "ImportError: No module named Tkinter"即使我昨天才使用 Tkinter 程序并且没有进行实质性更改?

python - Python 中的 map 颜色算法

python - scipy stats 几何平均返回 NaN