Issue 24745: Merge with 3.5

This commit is contained in:
Terry Jan Reedy 2015-08-01 18:58:42 -04:00
commit eb803c8f9e
4 changed files with 51 additions and 35 deletions

View file

@ -230,13 +230,7 @@ def __init__(self, flist=None, filename=None, key=None, root=None):
vbar['command'] = text.yview
vbar.pack(side=RIGHT, fill=Y)
text['yscrollcommand'] = vbar.set
fontWeight = 'normal'
if idleConf.GetOption('main', 'EditorWindow', 'font-bold', type='bool'):
fontWeight='bold'
text.config(font=(idleConf.GetOption('main', 'EditorWindow', 'font'),
idleConf.GetOption('main', 'EditorWindow',
'font-size', type='int'),
fontWeight))
text['font'] = idleConf.GetFont(self.root, 'main', 'EditorWindow')
text_frame.pack(side=LEFT, fill=BOTH, expand=1)
text.pack(side=TOP, fill=BOTH, expand=1)
text.focus_set()
@ -797,13 +791,8 @@ def colorize_syntax_error(self, text, pos):
def ResetFont(self):
"Update the text widgets' font if it is changed"
# Called from configDialog.py
fontWeight='normal'
if idleConf.GetOption('main','EditorWindow','font-bold',type='bool'):
fontWeight='bold'
self.text.config(font=(idleConf.GetOption('main','EditorWindow','font'),
idleConf.GetOption('main','EditorWindow','font-size',
type='int'),
fontWeight))
self.text['font'] = idleConf.GetFont(self.root, 'main','EditorWindow')
def RemoveKeybindings(self):
"Remove the keybindings before they are changed."

View file

@ -53,7 +53,7 @@ delete-exitfunc= 1
[EditorWindow]
width= 80
height= 40
font= courier
font= TkFixedFont
font-size= 10
font-bold= 0
encoding= none

View file

@ -465,9 +465,9 @@ def CreatePageGeneral(self):
return frame
def AttachVarCallbacks(self):
self.fontSize.trace_variable('w', self.VarChanged_fontSize)
self.fontName.trace_variable('w', self.VarChanged_fontName)
self.fontBold.trace_variable('w', self.VarChanged_fontBold)
self.fontSize.trace_variable('w', self.VarChanged_font)
self.fontName.trace_variable('w', self.VarChanged_font)
self.fontBold.trace_variable('w', self.VarChanged_font)
self.spaceNum.trace_variable('w', self.VarChanged_spaceNum)
self.colour.trace_variable('w', self.VarChanged_colour)
self.builtinTheme.trace_variable('w', self.VarChanged_builtinTheme)
@ -484,15 +484,15 @@ def AttachVarCallbacks(self):
self.autoSave.trace_variable('w', self.VarChanged_autoSave)
self.encoding.trace_variable('w', self.VarChanged_encoding)
def VarChanged_fontSize(self, *params):
value = self.fontSize.get()
self.AddChangedItem('main', 'EditorWindow', 'font-size', value)
def VarChanged_fontName(self, *params):
def VarChanged_font(self, *params):
'''When one font attribute changes, save them all, as they are
not independent from each other. In particular, when we are
overriding the default font, we need to write out everything.
'''
value = self.fontName.get()
self.AddChangedItem('main', 'EditorWindow', 'font', value)
def VarChanged_fontBold(self, *params):
value = self.fontSize.get()
self.AddChangedItem('main', 'EditorWindow', 'font-size', value)
value = self.fontBold.get()
self.AddChangedItem('main', 'EditorWindow', 'font-bold', value)
@ -958,24 +958,24 @@ def LoadFontCfg(self):
fonts.sort()
for font in fonts:
self.listFontName.insert(END, font)
configuredFont = idleConf.GetOption(
'main', 'EditorWindow', 'font', default='courier')
lc_configuredFont = configuredFont.lower()
self.fontName.set(lc_configuredFont)
configuredFont = idleConf.GetFont(self, 'main', 'EditorWindow')
fontName = configuredFont[0].lower()
fontSize = configuredFont[1]
fontBold = configuredFont[2]=='bold'
self.fontName.set(fontName)
lc_fonts = [s.lower() for s in fonts]
if lc_configuredFont in lc_fonts:
currentFontIndex = lc_fonts.index(lc_configuredFont)
try:
currentFontIndex = lc_fonts.index(fontName)
self.listFontName.see(currentFontIndex)
self.listFontName.select_set(currentFontIndex)
self.listFontName.select_anchor(currentFontIndex)
except ValueError:
pass
##font size dropdown
fontSize = idleConf.GetOption(
'main', 'EditorWindow', 'font-size', type='int', default='10')
self.optMenuFontSize.SetMenu(('7', '8', '9', '10', '11', '12', '13',
'14', '16', '18', '20', '22'), fontSize )
##fontWeight
self.fontBold.set(idleConf.GetOption(
'main', 'EditorWindow', 'font-bold', default=0, type='bool'))
self.fontBold.set(fontBold)
##font sample
self.SetFontSample()

View file

@ -22,6 +22,7 @@
import sys
from configparser import ConfigParser
from tkinter.font import Font, nametofont
class InvalidConfigType(Exception): pass
class InvalidConfigSet(Exception): pass
@ -670,6 +671,32 @@ def GetAllExtraHelpSourcesList(self):
self.GetExtraHelpSourceList('user') )
return allHelpSources
def GetFont(self, root, configType, section):
"""Retrieve a font from configuration (font, font-size, font-bold)
Intercept the special value 'TkFixedFont' and substitute
the actual font, factoring in some tweaks if needed for
appearance sakes.
The 'root' parameter can normally be any valid Tkinter widget.
Return a tuple (family, size, weight) suitable for passing
to tkinter.Font
"""
family = self.GetOption(configType, section, 'font', default='courier')
size = self.GetOption(configType, section, 'font-size', type='int',
default='10')
bold = self.GetOption(configType, section, 'font-bold', default=0,
type='bool')
if (family == 'TkFixedFont'):
f = Font(name='TkFixedFont', exists=True, root=root)
actualFont = Font.actual(f)
family = actualFont['family']
size = actualFont['size']
if size < 0:
size = 10 # if font in pixels, ignore actual size
bold = actualFont['weight']=='bold'
return (family, size, 'bold' if bold else 'normal')
def LoadCfgFiles(self):
"Load all configuration files."
for key in self.defaultCfg: