如何将图像与 ttk.Treeview 中的航向中心对齐

How can I align image to center of heading in ttk.Treeview

尝试用 ttk.Treeview 中的图片标题替换文本标题,但图片总是右对齐。 如何将图像与航向中心对齐?

这里,图片是一个小蓝框,仅供演示,大多数时候,图片的大小总是小于列大小。

from PIL import Image, ImageTk
from tkinter import Tk, ttk

root = Tk()

font = ('Courier New', 20)
headings = [f'Column {i}' for i in range(3)]
treeview = ttk.Treeview(root, columns=headings, show='headings', height=5)

im = Image.new("RGBA", (20, 20), "#0000ffff")
image = ImageTk.PhotoImage(im)

for heading in headings:
    treeview.heading(heading, image=image, anchor='w')
    treeview.column(heading, width=200)

style = ttk.Style()
heading_name = "Treeview.Heading"
style.configure(heading_name, font=("Courier New", 40))
treeview.pack()

root.mainloop()

添加样式布局并设置('Treeheading.image', {'side': 'top', 'sticky': ''})后,图片居中居中,纵横均不居中

from PIL import Image, ImageTk
from tkinter import Tk, ttk

root = Tk()

font = ('Courier New', 20)
headings = [f'Column {i}' for i in range(3)]
treeview = ttk.Treeview(root, columns=headings, show='headings', height=5)

im = Image.new("RGBA", (20, 20), "#0000ffff")
image = ImageTk.PhotoImage(im)

for heading in headings:
    treeview.heading(heading, image=image, anchor='w')
    treeview.column(heading, width=200)

style = ttk.Style()
heading_name = "Treeview.Heading"

style.layout(heading_name,
             [('Treeheading.cell', {'sticky': 'nswe'}),
              ('Treeheading.border', {'sticky': 'nswe', 'children': [
                  ('Treeheading.padding', {'sticky': 'nswe', 'children': [
                      ('Treeheading.image', {'side': 'top', 'sticky': ''}),
                      ('Treeheading.text', {'sticky': 'we'})
                      ]})
                  ]})
              ])

style.configure(heading_name, font=("Courier New", 40))
treeview.pack()

root.mainloop()

[更新] 这是我在此处获得解决方案后脚本的结果。 标题不是文本,而是旋转的图像。

正如我在评论中指出的那样,您可以为此使用 ttk.Style。示例如下:

from PIL import Image, ImageTk
from tkinter import Tk, ttk

root = Tk()
style = ttk.Style(root)

font = ('Courier New', 20)
headings = [f'Column {i}' for i in range(3)]
treeview = ttk.Treeview(root, columns=headings, show='headings', height=5,
                        style='my.Treeview')

im = Image.new("RGBA", (20, 20), "#0000ffff")
image = ImageTk.PhotoImage(im)

for heading in headings:
    treeview.heading(heading, image=image, anchor='w')
    treeview.column(heading, width=200)

treeview.pack()

style.layout('my.Treeview.Heading',
             [('Treeheading.cell', {'sticky': 'nswe'}),
              ('Treeheading.border', {'sticky': 'nswe', 'children': [
                  ('Treeheading.padding', {'sticky': 'nswe', 'children': [
                      ('Treeheading.image', {'side': 'top', 'sticky': '','expand':True}),
                      ('Treeheading.text', {'sticky': 'we'})
                      ]})
                  ]})
              ])

root.mainloop()

我刚改了('Treeheading.image', {'side': 'right', 'sticky': ''}),