|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 zltzlt 于 2019-11-16 21:44 编辑
- from tkinter import Tk, Frame, LabelFrame, OptionMenu, Checkbutton, Scale, Label, Button, StringVar, IntVar, BooleanVar, font
- from tkinter import ttk
- class Font_Selector:
- def __init__(self):
- self.root = Tk()
- self.root.title('Font Selector')
- self.root.geometry('600x400')
- self.font_var = {'family': StringVar(), 'size' : IntVar(), 'weight' : StringVar(), 'slant' : StringVar(), 'underline' : BooleanVar(), 'overstrike' : BooleanVar()}
- self.initial_font_var()
- self.legend = StringVar()
- self.legend_font = font.Font()
- self.build_legend_font()
- def initial_font_var(self, default=None):
- if not default:
- default = font.nametofont("TkDefaultFont")
- self.font_var['family'].set(default.cget('family'))
- self.font_var['size'].set(default.cget('size'))
- self.font_var['weight'].set(default.cget('weight'))
- self.font_var['slant'].set(default.cget('slant'))
- self.font_var['underline'].set(default.cget('underline'))
- self.font_var['overstrike'].set(default.cget('overstrike'))
- def build_legend_font(self):
- self.legend_font.config(family=self.font_var['family'].get())
- self.legend_font.config(size=self.font_var['size'].get())
- self.legend_font.config(weight=self.font_var['weight'].get())
- self.legend_font.config(slant=self.font_var['slant'].get())
- self.legend_font.config(underline=self.font_var['underline'].get())
- self.legend_font.config(overstrike=self.font_var['overstrike'].get())
- def build_setup(self):
- frame_setup = Frame(self.root, padx=5, pady=5)
- frame_setup.pack(fill='x')
- frame_setup.columnconfigure(1, weight=1)
- frame_setup.rowconfigure(1, weight=1)
- frame_family = LabelFrame(frame_setup, text='families')
- frame_family.grid(row=0, column=0, padx=5, pady=5)
- font_families = font.families()
-
- self.families = ttk.Combobox(frame_family, name='family', state="readonly", textvariable=self.font_var['family'], values=font_families)
- self.families.grid(padx=10, pady=10, sticky='ew')
- frame_style = LabelFrame(frame_setup, text='style')
- frame_style.grid(row=0, column=1, sticky='ew', padx= 5)
- frame_style.columnconfigure(0, weight=1)
- frame_style.columnconfigure(1, weight=1)
- frame_style.columnconfigure(2, weight=1)
- frame_style.columnconfigure(3, weight=1)
- self.weight = Checkbutton(frame_style, name='weight', text='Bold', variable=self.font_var['weight'], onvalue='bold', offvalue='normal', command=lambda event='weight' : self.font_changed(event))
- self.weight.grid(row=0, column=0, padx=10, pady=8, sticky='ew')
- self.slant = Checkbutton(frame_style, name='slant', text='Italic', variable=self.font_var['slant'], onvalue='italic', offvalue='roman', command=lambda event='slant' : self.font_changed(event))
- self.slant.grid(row=0, column=1, padx=10, pady=8, sticky='ew')
- self.underline = Checkbutton(frame_style, name='underline', text='Underline', variable=self.font_var['underline'], command=lambda event='underline' : self.font_changed(event))
- self.underline.grid(row=0, column=2, padx=10, pady=8, sticky='ew')
- self.overstrike = Checkbutton(frame_style, name='overstrike', text='Overstrike', variable=self.font_var['overstrike'], command=lambda event='overstrike' : self.font_changed(event))
- self.overstrike.grid(row=0, column=3, padx=10, pady=8, sticky='ew')
- frame_size = LabelFrame(frame_setup, text='size')
- frame_size.grid(row=1, column=0, columnspan=2, sticky='ew', padx=5)
- frame_size.columnconfigure(0, weight=1)
-
- self.size = Scale(frame_size, variable = self.font_var['size'], from_=8, to=72, tickinterval=8, length=400, orient='horizontal', command=self.font_changed)
- self.size.grid(row=1, column=0, sticky='ew', padx= 5, pady=5)
- def build_legend(self):
- frame_legend = LabelFrame(self.root, text='legend', bg='red', padx=5, pady=5)
- frame_legend.pack(padx=10, fill='both', expand=True)
- frame_legend.rowconfigure(0, weight=1)
- frame_legend.columnconfigure(0, weight=1)
- self.legend.set('ABCDEabcde12345')
- self.legend = Label(frame_legend, textvariable=self.legend, font=self.legend_font, borderwidth=2, relief='groove', padx=10, pady=10)
- self.legend.grid(row=0, column=0, padx=5, pady=5, sticky='ewns')
- def font_changed(self, event):
- # key = str(event.widget).split(".")[-1]
- # value = event.widget.get()
- # self.font_var[key].set(value)
- self.build_legend_font()
-
- def build_event(self):
- self.families.bind('<<ComboboxSelected>>', self.font_changed)
- def build_footer(self):
- separator = Frame(self.root, height=2, bd=2, relief='groove')
- separator.pack(fill='x', padx=10, pady=2)
- frame_footer = Frame(self.root, padx=5, pady=5)
- frame_footer.pack(padx=10, fill='x')
- self.apply = Button(frame_footer, text='apply', width=10)
- self.apply.pack(side='right')
- self.cancel = Button(frame_footer, text='cancel', width=10)
- self.cancel.pack(side='right', padx=10)
- self.ok = Button(frame_footer, text='ok', width=10)
- self.ok.pack(side='right')
-
- def get_info(self):
- defaut = font.nametofont("TkDefaultFont")
- print('family: ', defaut.cget('family'))
- print('size: ', defaut.cget('size'))
- print('weight: ', defaut.cget('weight'))
- print('slant: ', defaut.cget('slant'))
- print('underline: ', defaut.cget('underline'))
- print('overstrike: ', defaut.cget('overstrike'))
- if __name__ == '__main__':
-
- fs = Font_Selector()
- fs.get_info()
- fs.build_setup()
- fs.build_legend()
- fs.build_event()
- fs.build_footer()
- fs.root.mainloop()
复制代码 |
|