我需要一个遍历所有用户安装字体的Python3.3 Tkinter可滚动列表框的帮助。此功能的目的是在程序的另一部分中更改“文本字段”中的字体。
from tkinter import *
import tkinter.font
def fontValue():
fontroot=Tk()
fontroot.wm_title('FONTS')
fonts=list(tkinter.font.families())
fonts.sort()
fontbox = Listbox(fontroot,height=20)
fontbox.pack(fill=BOTH, expand=YES, side=LEFT)
scroll = Scrollbar(fontroot)
scroll.pack(side=RIGHT, fill=Y, expand=NO)
scroll.configure(command=fontbox.yview)
fontbox.configure(yscrollcommand=scroll.set)
for item in fonts:
fontbox.insert(END, item)
fontroot.mainloop()
那么,如何将列表框中当前选择的字体字符串分配给变量?我想将当前选择的字体分配给一个变量....让我们称它为MainFontVar .....我没有在代码中放入变量,因为我不知道如何访问当前选择的字体...。任何帮助将不胜感激....我为我的迟钝而道歉。
最佳答案
您需要保存字体列表,因为小部件只能给您选定的索引。大致情况:
from tkinter import *
import tkinter.font
class Main(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
self.fonts = list(tkinter.font.families())
self.fonts.sort()
self.list = Listbox(self)
for item in self.fonts:
self.list.insert(END, item)
self.list.pack(side=LEFT, expand=YES, fill=BOTH)
self.list.bind("<<ListboxSelect>>", self.PrintSelected)
self.scroll = Scrollbar(self)
self.scroll.pack(side=RIGHT, fill=Y)
self.scroll.configure(command=self.list.yview)
self.list.configure(yscrollcommand=self.scroll.set)
def PrintSelected(self, e):
print(self.fonts[int(self.list.curselection()[0])])
root = Main()
root.mainloop()
很棒的Tk教程位于http://www.tkdocs.com/
为了获得更好的外观(在我的情况下,在Windows上),可以将
ttk
用作Scrollbar
,并禁用Listbox
中已激活元素的下划线(没有主题变体)。from tkinter import ttk
from tkinter import *
import tkinter.font
class Main(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
self.fonts = list(tkinter.font.families())
self.fonts.sort()
self.list = Listbox(self, activestyle=NONE)
for item in self.fonts:
self.list.insert(END, item)
self.list.pack(side=LEFT, expand=YES, fill=BOTH)
self.list.bind("<<ListboxSelect>>", self.PrintSelected)
self.scroll = ttk.Scrollbar(self)
self.scroll.pack(side=RIGHT, fill=Y)
self.scroll.configure(command=self.list.yview)
self.list.configure(yscrollcommand=self.scroll.set)
def PrintSelected(self, e):
print(self.fonts[int(self.list.curselection()[0])])
root = Main()
root.mainloop()