Tkinter如何更改treeview字体
我试图在tkinter树视图中更改字体,但不知道如何更改。我可以更改treeview列标题字体,但不能更改行中的字体。下面的演示使用spinbox更改字体大小。我尝试过使用“TkTextFont”,但它不起作用,它会更改spinbox中的字体大小,但不会更改树视图Tkinter如何更改treeview字体,tkinter,Tkinter,我试图在tkinter树视图中更改字体,但不知道如何更改。我可以更改treeview列标题字体,但不能更改行中的字体。下面的演示使用spinbox更改字体大小。我尝试过使用“TkTextFont”,但它不起作用,它会更改spinbox中的字体大小,但不会更改树视图 import tkinter as tk import tkinter.ttk as ttk import tkinter.font as tkfont class MySpinbox(ttk.Spinbox): def
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.font as tkfont
class MySpinbox(ttk.Spinbox):
def __init__(self, master=None, delay=250, **kwargs):
ttk.Spinbox.__init__(self, master, **kwargs)
self.delay = delay # repeatdelay in ms
self.bind('<<Increment>>', self._on_increment)
self.bind('<<Decrement>>', self._on_decrement)
self._increment_lock = False
self._decrement_lock = False
def _unlock_increment(self):
self._increment_lock = False
def _on_increment(self, event):
if self._increment_lock:
return "break" # stop the increment
else:
# generate a virtual event corresponding to when the spinbox
# is actually incremented
self.event_generate('<<ActualIncrement>>')
self._increment_lock = True
self.after(self.delay, self._unlock_increment)
def _unlock_decrement(self):
self._decrement_lock = False
def _on_decrement(self, event):
if self._decrement_lock:
return "break" # stop the increment
else:
# generate a virtual event corresponding to when the spinbox
# is actually decremented
self.event_generate('<<ActualDecrement>>')
self._decrement_lock = True
self.after(self.delay, self._unlock_decrement)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.title('Treeview Demo')
self.geometry('420x200+20+20')
style = ttk.Style()
var = tk.StringVar()
var.set(9)
tv = self.tv = ttk.Treeview(self)
tv.grid(row=0, column=0, sticky='NSEW')
def size():
font = tkfont.nametofont('TkHeadingFont')
font.config(size=var.get())
style.configure('Treeview.Heading', font=font)
font = tkfont.nametofont('TkTextFont')
font.config(size=var.get())
spn = MySpinbox(self, textvariable=var, values=list(range(0, 1000)), command=size)
spn.grid(row=0, column=1, pady=5, padx=20)
tv.heading('#0', text='Name')
tv.insert('', '0', 'item1', text='Item 1')
tv.insert('', '1', 'item2', text='Item 2')
tv.insert('', '2', 'item3', text='Item 3')
tv.insert('item1', '0', 'python1', text='Python 1')
tv.insert('item1', '1', 'python2', text='Python 2')
tv.insert('python1', '0', 'sub1', text='Sub item 1')
tv.insert('python1', '1', 'sub2', text='Sub item 2')
def main():
app = App()
app.mainloop()
if __name__ == '__main__':
main()
将tkinter作为tk导入
将tkinter.ttk导入为ttk
将tkinter.font作为tkfont导入
类MySpinbox(ttk.Spinbox):
定义初始值(自,主=无,延迟=250,**kwargs):
ttk.Spinbox.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu(自我、主控、**kwargs)
self.delay=延迟#重复延迟(毫秒)
self.bind(“”,self.\u在增量上)
自我约束('',自我递减)
self.\u increment\u lock=False
自衰减锁定=假
def解锁增量(自):
self.\u increment\u lock=False
def-on增量(自身、事件):
如果自锁.\u增量\u锁:
返回“break”#停止增量
其他:
#生成与spinbox启动时对应的虚拟事件
#实际上是递增的
自我事件_生成(“”)
self.\u increment\u lock=True
self.after(self.delay,self.\u解锁\u增量)
def_解锁_减量(自):
自衰减锁定=假
def_开_减量(自身、事件):
如果是自减锁定:
返回“break”#停止增量
其他:
#生成与spinbox启动时对应的虚拟事件
#实际上是递减的
自我事件_生成(“”)
自衰减锁定=真
self.after(self.delay,self.\u解锁\u减量)
类应用程序(tk.tk):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.rowconfigure(0,权重=1)
self.columnconfigure(0,权重=1)
self.title('Treeview Demo')
自几何体('420x200+20+20')
style=ttk.style()
var=tk.StringVar()
变量集(9)
tv=self.tv=ttk.Treeview(self)
tv.grid(行=0,列=0,sticky='NSEW')
def size():
font=tkfont.nametofont('TkHeadingFont'))
font.config(size=var.get())
style.configure('Treeview.Heading',font=font)
font=tkfont.nametofont('TkTextFont'))
font.config(size=var.get())
spn=MySpinbox(self,textvariable=var,values=list(范围(0,1000)),command=size)
标准网格(行=0,列=1,pady=5,padx=20)
电视标题(“#0”,text='Name')
插入(“”,'0','item1',text='item1')
插入(“”,'1','item2',text='item2')
插入(“”,'2','item3',text='item3')
insert('item1','0','python1',text='python1')
insert('item1','1','python2',text='python2')
插入('python1','0','sub1',text='subitem1')
插入('python1','1','sub2',text='subitem 2')
def main():
app=app()
app.mainloop()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
我刚刚学会了如何在树视图中设置字体,我在这里发布了我的解决方案,以防其他人有同样的问题。treeview似乎不响应命名字体,您必须使用
tag_configure()并在树中插入项时设置tags参数。我认为这是唯一的办法
import tkinter as tk
import tkinter.ttk as ttk
import tkinter.font as tkfont
class MySpinbox(ttk.Spinbox):
def __init__(self, master=None, delay=100, **kwargs):
ttk.Spinbox.__init__(self, master, **kwargs)
self.delay = delay # repeatdelay in ms
self.bind('<<Increment>>', self._on_increment)
self.bind('<<Decrement>>', self._on_decrement)
self._increment_lock = False
self._decrement_lock = False
def _unlock_increment(self):
self._increment_lock = False
def _on_increment(self, event):
if self._increment_lock:
return "break" # stop the increment
else:
# generate a virtual event corresponding to when the spinbox
# is actually incremented
self.event_generate('<<ActualIncrement>>')
self._increment_lock = True
self.after(self.delay, self._unlock_increment)
def _unlock_decrement(self):
self._decrement_lock = False
def _on_decrement(self, event):
if self._decrement_lock:
return "break" # stop the increment
else:
# generate a virtual event corresponding to when the spinbox
# is actually decremented
self.event_generate('<<ActualDecrement>>')
self._decrement_lock = True
self.after(self.delay, self._unlock_decrement)
class App(tk.Tk):
def __init__(self):
super().__init__()
self.rowconfigure(0, weight=1)
self.columnconfigure(0, weight=1)
self.title('Treeview Demo')
self.geometry('420x200+20+20')
style = ttk.Style()
var = tk.StringVar()
var.set(9)
tv = self.tv = ttk.Treeview(self)
tv.grid(row=0, column=0, sticky='NSEW')
font = tkfont.nametofont('TkTextFont')
tv.tag_configure('TkTextFont', font=tkfont.nametofont('TkTextFont'))
style.configure('Treeview', rowheight=font.metrics('linespace'))
def size():
_font = tkfont.nametofont('TkHeadingFont')
_font.config(size=var.get())
style.configure('Treeview.Heading', font=_font)
_font = tkfont.nametofont('TkTextFont')
_font.configure(size=var.get())
style.configure('Treeview', rowheight=_font.metrics('linespace'))
spn = MySpinbox(self, textvariable=var, values=list(range(0, 1000)), command=size)
spn.grid(row=0, column=1, pady=5, padx=20)
tv.heading('#0', text='Name')
tv.insert('', '0', 'item1', text='Item 1', tags='TkTextFont')
tv.insert('', '1', 'item2', text='Item 2', tags='TkTextFont')
tv.insert('', '2', 'item3', text='Item 3', tags='TkTextFont')
tv.insert('item1', '0', 'python1', text='Python 1', tags='TkTextFont')
tv.insert('item1', '1', 'python2', text='Python 2', tags='TkTextFont')
tv.insert('python1', '0', 'sub1', text='Sub item 1', tags='TkTextFont')
tv.insert('python1', '1', 'sub2', text='Sub item 2', tags='TkTextFont')
def main():
app = App()
app.mainloop()
if __name__ == '__main__':
main()
将tkinter作为tk导入
将tkinter.ttk导入为ttk
将tkinter.font作为tkfont导入
类MySpinbox(ttk.Spinbox):
定义初始值(自,主=无,延迟=100,**kwargs):
ttk.Spinbox.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu(自我、主控、**kwargs)
self.delay=延迟#重复延迟(毫秒)
self.bind(“”,self.\u在增量上)
自我约束('',自我递减)
self.\u increment\u lock=False
自衰减锁定=假
def解锁增量(自):
self.\u increment\u lock=False
def-on增量(自身、事件):
如果自锁.\u增量\u锁:
返回“break”#停止增量
其他:
#生成与spinbox启动时对应的虚拟事件
#实际上是递增的
自我事件_生成(“”)
self.\u increment\u lock=True
self.after(self.delay,self.\u解锁\u增量)
def_解锁_减量(自):
自衰减锁定=假
def_开_减量(自身、事件):
如果是自减锁定:
返回“break”#停止增量
其他:
#生成与spinbox启动时对应的虚拟事件
#实际上是递减的
自我事件_生成(“”)
自衰减锁定=真
self.after(self.delay,self.\u解锁\u减量)
类应用程序(tk.tk):
定义初始化(自):
super()。\uuuu init\uuuuu()
self.rowconfigure(0,权重=1)
self.columnconfigure(0,权重=1)
self.title('Treeview Demo')
自几何体('420x200+20+20')
style=ttk.style()
var=tk.StringVar()
变量集(9)
tv=self.tv=ttk.Treeview(self)
tv.grid(行=0,列=0,sticky='NSEW')
font=tkfont.nametofont('TkTextFont'))
tv.tag\u configure('TkTextFont',font=tkfont.nametofont('TkTextFont'))
style.configure('Treeview',rowheight=font.metrics('linespace'))
def size():
_font=tkfont.nametofont('TkHeadingFont'))
_font.config(size=var.get())
style.configure('Treeview.Heading',font=\u font)
_font=tkfont.nametofont('TkTextFont'))
_font.configure(size=var.get())
style.configure('Treeview',rowheight=\u font.metrics('linespace'))
spn=MySpinbox(self,textvariable=var,values=list(范围(0,1000)),command=size)
标准网格(行=0,列=1,pady=5,padx=20)
电视标题(“#0”,text='Name')
插入(“”,'0','item1',text='item1',tags='TkTextFont')
插入(“”,'1','item2',text='Item 2',tags='TkTextFont')
插入(“”,'2','item3',text='Item
tk.splitlist(tk.call("font", "names"))