[3.6] bpo-30870: IDLE: Change sample font when select by key-up/down (GH-2617) (#2640)
Patch by Louie Lu.
(cherry picked from commit bb2bae8
)
This commit is contained in:
parent
04f77d4677
commit
7ab3342333
|
@ -14,7 +14,7 @@ from tkinter import (Toplevel, Frame, LabelFrame, Listbox, Label, Button,
|
||||||
StringVar, BooleanVar, IntVar, TRUE, FALSE,
|
StringVar, BooleanVar, IntVar, TRUE, FALSE,
|
||||||
TOP, BOTTOM, RIGHT, LEFT, SOLID, GROOVE, NORMAL, DISABLED,
|
TOP, BOTTOM, RIGHT, LEFT, SOLID, GROOVE, NORMAL, DISABLED,
|
||||||
NONE, BOTH, X, Y, W, E, EW, NS, NSEW, NW,
|
NONE, BOTH, X, Y, W, E, EW, NS, NSEW, NW,
|
||||||
HORIZONTAL, VERTICAL, ANCHOR, END)
|
HORIZONTAL, VERTICAL, ANCHOR, ACTIVE, END)
|
||||||
from tkinter.ttk import Scrollbar
|
from tkinter.ttk import Scrollbar
|
||||||
import tkinter.colorchooser as tkColorChooser
|
import tkinter.colorchooser as tkColorChooser
|
||||||
import tkinter.font as tkFont
|
import tkinter.font as tkFont
|
||||||
|
@ -78,7 +78,7 @@ class ConfigDialog(Toplevel):
|
||||||
self.transient(parent)
|
self.transient(parent)
|
||||||
self.grab_set()
|
self.grab_set()
|
||||||
self.protocol("WM_DELETE_WINDOW", self.cancel)
|
self.protocol("WM_DELETE_WINDOW", self.cancel)
|
||||||
self.tab_pages.focus_set()
|
self.fontlist.focus_set()
|
||||||
# XXX Decide whether to keep or delete these key bindings.
|
# XXX Decide whether to keep or delete these key bindings.
|
||||||
# Key bindings for this dialog.
|
# Key bindings for this dialog.
|
||||||
# self.bind('<Escape>', self.Cancel) #dismiss dialog, no save
|
# self.bind('<Escape>', self.Cancel) #dismiss dialog, no save
|
||||||
|
@ -143,26 +143,24 @@ class ConfigDialog(Toplevel):
|
||||||
self.space_num = IntVar(parent)
|
self.space_num = IntVar(parent)
|
||||||
self.edit_font = tkFont.Font(parent, ('courier', 10, 'normal'))
|
self.edit_font = tkFont.Font(parent, ('courier', 10, 'normal'))
|
||||||
|
|
||||||
##widget creation
|
# Create widgets.
|
||||||
#body frame
|
# body and body section frames.
|
||||||
frame = self.tab_pages.pages['Fonts/Tabs'].frame
|
frame = self.tab_pages.pages['Fonts/Tabs'].frame
|
||||||
#body section frames
|
|
||||||
frame_font = LabelFrame(
|
frame_font = LabelFrame(
|
||||||
frame, borderwidth=2, relief=GROOVE, text=' Base Editor Font ')
|
frame, borderwidth=2, relief=GROOVE, text=' Base Editor Font ')
|
||||||
frame_indent = LabelFrame(
|
frame_indent = LabelFrame(
|
||||||
frame, borderwidth=2, relief=GROOVE, text=' Indentation Width ')
|
frame, borderwidth=2, relief=GROOVE, text=' Indentation Width ')
|
||||||
#frame_font
|
# frame_font
|
||||||
frame_font_name = Frame(frame_font)
|
frame_font_name = Frame(frame_font)
|
||||||
frame_font_param = Frame(frame_font)
|
frame_font_param = Frame(frame_font)
|
||||||
font_name_title = Label(
|
font_name_title = Label(
|
||||||
frame_font_name, justify=LEFT, text='Font Face :')
|
frame_font_name, justify=LEFT, text='Font Face :')
|
||||||
self.list_fonts = Listbox(
|
self.fontlist = Listbox(
|
||||||
frame_font_name, height=5, takefocus=FALSE, exportselection=FALSE)
|
frame_font_name, height=5, takefocus=FALSE, exportselection=FALSE)
|
||||||
self.list_fonts.bind(
|
self.fontlist.bind('<<ListboxSelect>>', self.on_fontlist_select)
|
||||||
'<ButtonRelease-1>', self.on_list_fonts_button_release)
|
|
||||||
scroll_font = Scrollbar(frame_font_name)
|
scroll_font = Scrollbar(frame_font_name)
|
||||||
scroll_font.config(command=self.list_fonts.yview)
|
scroll_font.config(command=self.fontlist.yview)
|
||||||
self.list_fonts.config(yscrollcommand=scroll_font.set)
|
self.fontlist.config(yscrollcommand=scroll_font.set)
|
||||||
font_size_title = Label(frame_font_param, text='Size :')
|
font_size_title = Label(frame_font_param, text='Size :')
|
||||||
self.opt_menu_font_size = DynOptionMenu(
|
self.opt_menu_font_size = DynOptionMenu(
|
||||||
frame_font_param, self.font_size, None, command=self.set_font_sample)
|
frame_font_param, self.font_size, None, command=self.set_font_sample)
|
||||||
|
@ -173,7 +171,7 @@ class ConfigDialog(Toplevel):
|
||||||
self.font_sample = Label(
|
self.font_sample = Label(
|
||||||
frame_font_sample, justify=LEFT, font=self.edit_font,
|
frame_font_sample, justify=LEFT, font=self.edit_font,
|
||||||
text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]')
|
text='AaBbCcDdEe\nFfGgHhIiJjK\n1234567890\n#:+=(){}[]')
|
||||||
#frame_indent
|
# frame_indent
|
||||||
frame_indent_size = Frame(frame_indent)
|
frame_indent_size = Frame(frame_indent)
|
||||||
indent_size_title = Label(
|
indent_size_title = Label(
|
||||||
frame_indent_size, justify=LEFT,
|
frame_indent_size, justify=LEFT,
|
||||||
|
@ -182,25 +180,26 @@ class ConfigDialog(Toplevel):
|
||||||
frame_indent_size, variable=self.space_num,
|
frame_indent_size, variable=self.space_num,
|
||||||
orient='horizontal', tickinterval=2, from_=2, to=16)
|
orient='horizontal', tickinterval=2, from_=2, to=16)
|
||||||
|
|
||||||
#widget packing
|
# Pack widgets.
|
||||||
#body
|
# body
|
||||||
frame_font.pack(side=LEFT, padx=5, pady=5, expand=TRUE, fill=BOTH)
|
frame_font.pack(side=LEFT, padx=5, pady=5, expand=TRUE, fill=BOTH)
|
||||||
frame_indent.pack(side=LEFT, padx=5, pady=5, fill=Y)
|
frame_indent.pack(side=LEFT, padx=5, pady=5, fill=Y)
|
||||||
#frame_font
|
# frame_font
|
||||||
frame_font_name.pack(side=TOP, padx=5, pady=5, fill=X)
|
frame_font_name.pack(side=TOP, padx=5, pady=5, fill=X)
|
||||||
frame_font_param.pack(side=TOP, padx=5, pady=5, fill=X)
|
frame_font_param.pack(side=TOP, padx=5, pady=5, fill=X)
|
||||||
font_name_title.pack(side=TOP, anchor=W)
|
font_name_title.pack(side=TOP, anchor=W)
|
||||||
self.list_fonts.pack(side=LEFT, expand=TRUE, fill=X)
|
self.fontlist.pack(side=LEFT, expand=TRUE, fill=X)
|
||||||
scroll_font.pack(side=LEFT, fill=Y)
|
scroll_font.pack(side=LEFT, fill=Y)
|
||||||
font_size_title.pack(side=LEFT, anchor=W)
|
font_size_title.pack(side=LEFT, anchor=W)
|
||||||
self.opt_menu_font_size.pack(side=LEFT, anchor=W)
|
self.opt_menu_font_size.pack(side=LEFT, anchor=W)
|
||||||
check_font_bold.pack(side=LEFT, anchor=W, padx=20)
|
check_font_bold.pack(side=LEFT, anchor=W, padx=20)
|
||||||
frame_font_sample.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
|
frame_font_sample.pack(side=TOP, padx=5, pady=5, expand=TRUE, fill=BOTH)
|
||||||
self.font_sample.pack(expand=TRUE, fill=BOTH)
|
self.font_sample.pack(expand=TRUE, fill=BOTH)
|
||||||
#frame_indent
|
# frame_indent
|
||||||
frame_indent_size.pack(side=TOP, fill=X)
|
frame_indent_size.pack(side=TOP, fill=X)
|
||||||
indent_size_title.pack(side=TOP, anchor=W, padx=5)
|
indent_size_title.pack(side=TOP, anchor=W, padx=5)
|
||||||
self.scale_indent_size.pack(side=TOP, padx=5, fill=X)
|
self.scale_indent_size.pack(side=TOP, padx=5, fill=X)
|
||||||
|
|
||||||
return frame
|
return frame
|
||||||
|
|
||||||
def create_page_highlight(self):
|
def create_page_highlight(self):
|
||||||
|
@ -986,13 +985,13 @@ class ConfigDialog(Toplevel):
|
||||||
self.is_builtin_theme.set(0)
|
self.is_builtin_theme.set(0)
|
||||||
self.set_theme_type()
|
self.set_theme_type()
|
||||||
|
|
||||||
def on_list_fonts_button_release(self, event):
|
def on_fontlist_select(self, event):
|
||||||
"""Handle event of selecting a font from the list.
|
"""Handle selecting a font from the list.
|
||||||
|
|
||||||
Change the font name to the font selected from the list
|
Event can result from either mouse click or Up or Down key.
|
||||||
and update sample text to show that font.
|
Set font_name and example display to selection.
|
||||||
"""
|
"""
|
||||||
font = self.list_fonts.get(ANCHOR)
|
font = self.fontlist.get(ANCHOR if event.type == 3 else ACTIVE)
|
||||||
self.font_name.set(font.lower())
|
self.font_name.set(font.lower())
|
||||||
self.set_font_sample()
|
self.set_font_sample()
|
||||||
|
|
||||||
|
@ -1126,7 +1125,7 @@ class ConfigDialog(Toplevel):
|
||||||
fonts = list(tkFont.families(self))
|
fonts = list(tkFont.families(self))
|
||||||
fonts.sort()
|
fonts.sort()
|
||||||
for font in fonts:
|
for font in fonts:
|
||||||
self.list_fonts.insert(END, font)
|
self.fontlist.insert(END, font)
|
||||||
configured_font = idleConf.GetFont(self, 'main', 'EditorWindow')
|
configured_font = idleConf.GetFont(self, 'main', 'EditorWindow')
|
||||||
font_name = configured_font[0].lower()
|
font_name = configured_font[0].lower()
|
||||||
font_size = configured_font[1]
|
font_size = configured_font[1]
|
||||||
|
@ -1135,9 +1134,10 @@ class ConfigDialog(Toplevel):
|
||||||
lc_fonts = [s.lower() for s in fonts]
|
lc_fonts = [s.lower() for s in fonts]
|
||||||
try:
|
try:
|
||||||
current_font_index = lc_fonts.index(font_name)
|
current_font_index = lc_fonts.index(font_name)
|
||||||
self.list_fonts.see(current_font_index)
|
self.fontlist.see(current_font_index)
|
||||||
self.list_fonts.select_set(current_font_index)
|
self.fontlist.select_set(current_font_index)
|
||||||
self.list_fonts.select_anchor(current_font_index)
|
self.fontlist.select_anchor(current_font_index)
|
||||||
|
self.fontlist.activate(current_font_index)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
# Set font size dropdown.
|
# Set font size dropdown.
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
IDLE: In Settings dialog, select font with Up, Down keys as well as mouse.
|
||||||
|
Initial patch by Louie Lu.
|
Loading…
Reference in New Issue