【问题标题】:About the space between image and text in ttk.treeview item关于 ttk.treeview 项中图像和文本之间的空间
【发布时间】:2021-03-03 17:40:55
【问题描述】:

在 tkinter 树视图中,我将图像添加到每一行,但图像和文本之间没有空格。
这是一个工作示例的代码:


import tkinter as tk
from tkinter import ttk
from PIL import ImageTk, Image


class App(ttk.Frame):

    def __init__(self, parent, *args, **kwargs):
        ttk.Frame.__init__(self, parent)
        self.parent = parent

        # Create Treeview
        self.tree = ttk.Treeview(self.parent, selectmode='browse')
        ttk.Style().configure("Treeview", rowheight=21)
        self.tree.pack(expand=True, fill='both', side='left')
        # Setup column heading
        self.tree.heading('#0', text='Items', anchor='center')
        # Setup columns
        self.tree.column('#0', minwidth=100, width=200, stretch=False)

        image = Image.new('RGB', (24, 18), 'cyan')
        self.cyan = ImageTk.PhotoImage(image)
        image = Image.new('RGB', (24, 18), 'orange')
        self.orange = ImageTk.PhotoImage(image)
        image = Image.new('RGB', (24, 18), 'yellow')
        self.yellow = ImageTk.PhotoImage(image)
        image = Image.new('RGB', (24, 18), 'red')
        self.red = ImageTk.PhotoImage(image)
        image = Image.new('RGB', (24, 18), 'green')
        self.green = ImageTk.PhotoImage(image)
        image = Image.new('RGB', (24, 18), 'purple')
        self.purple = ImageTk.PhotoImage(image)

        self.tree.insert('', '0', '0', text="Cyan", image=self.cyan)
        self.tree.insert('', '1', '1', text="Orange", image=self.orange)
        self.tree.insert('', '2', '2', text="Green", image=self.green)
        self.tree.insert('', '3', '3', text="Purple", image=self.purple)
        self.tree.insert('', '4', '4', text="Red", image=self.red)
        self.tree.insert('', '5', '5', text="Yellow", image=self.yellow)


if __name__ == '__main__':
    root = tk.Tk()
    root.geometry('400x175+200+100')
    App(root)
    root.mainloop()

使用此代码,我得到以下窗口:

我希望在每行的文本前留出更多空间。
这似乎不同于我在我拥有的任何软件中看到的任何东西。

当然有一个简单的解决方法:只需在文本的开头添加几个空格,但这似乎不是一个很好的解决方案,因为一旦开始处理它就更有可能出错来自不同方法的文本(检索或更改)。
另一种方法是在图片后面加一个稍微宽一点的透明层,但这也不是很好,因为它非常精细(实际上我不确定这是否可行),而且我在空间还可以的不同上下文,所以我必须复制图像。

我想一定有更聪明的方法,但我找不到。 有人知道吗?

【问题讨论】:

    标签: python-3.x tkinter treeview


    【解决方案1】:

    您可以使用透明图像并粘贴您的图像,例如:

    def image_pad(color, x, y, padx=5):
        image = Image.new('RGBA', (x + padx, y))
        image.paste(Image.new('RGB', (x, y), color))
        return ImageTk.PhotoImage(image)
    

    (我在window下测试过)

    【讨论】:

    • 这实际上工作得很好,而且比我预期的要容易(在加载图像之前这样做值得,所以我不必存储重复的图像)。 (+1)为此。我仍然会本着我所期待的精神等待答案的可能性。如果它没有出现(或者实际上实施起来更加困难和繁琐),那么我会接受你的回答。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多