我需要一个Python3.3 Tkinter可滚动列表框的帮助,该列表框遍历所有用户安装的字体。这个函数的目的是在程序的另一部分中更改Textfield中的字体....
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()
那么如何将我的Listbox中当前选择的字体字符串分配给变量?我想将当前选择的字体分配给变量....让我们称之为MainFontVar .....我没有把变量放在这个代码中,因为我不知道如何访问当前选择的字体....任何帮助将不胜感激....我为我的迟缓道歉。
答案 0 :(得分:1)
您需要保存字体列表,因为窗口小部件只能为您提供所选索引。一些事情:
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()