如何将图像与 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': ''}),
尝试用 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': ''}),