Repository: spyder-ide/spyder

Issue:
The text size in the IPython console changes depending on the code run on it
<!--- **PLEASE READ:** When submitting here, please ensure you've completed the following checklist and checked the boxes to confirm. Issue reports without it may be closed. Thanks! --->

### Issue Report Checklist

* [x] Searched the [issues page](https://github.com/spyder-ide/spyder/issues?q=is%3Aissue) for similar reports
* [ ] Read the relevant sections of the [Spyder Troubleshooting Guide](https://github.com/spyder-ide/spyder/wiki/Troubleshooting-Guide-and-FAQ) and followed its advice
* [x] Reproduced the issue after updating with ``conda update spyder`` (or ``pip``, if not using Anaconda)
* [ ] Could not reproduce inside ``jupyter qtconsole`` (if console-related)
* [ ] Tried basic troubleshooting (if a bug/error)
    * [x] Restarted Spyder
    * [x] Reset preferences with ``spyder --reset``
    * [x] Reinstalled the latest version of [Anaconda](https://www.anaconda.com/download/)
    * [ ] Tried the other applicable steps from the Troubleshooting Guide
* [x] Completed the **Problem Description**, **Steps to Reproduce** and **Version** sections below


## Problem Description
The set font size for the plain text under "Settings/Appearance/Fonts/Plain text" is reset/not taken over in the IPython console completely randomly after the execution of a script or the restart of the IPython console, no matter what is set. It does not matter if the script contains syntax errors or not. The plain text size from the editor is not affected. It stays at the value that is set.

Question: 
Does the set plain text size only apply to the editor or also to the IPython console because it adjusts both or is this a bug?

Would it be possible to add the text size setting for the IPython console separately in the settings?

### What steps reproduce the problem?

1. Under Preferences/Appearance/Fonts/Plain text size --> set size to "11"
2. Create two small scripts and place them into the same directory:
3. script 1: "testclass.py"
4. code script 1:
class test(object):
    pass
5. script 2: "debug.py"
6. code script 2:
import testclass as testclass
tc = testclass.test()
7. Run script "debug.py"
8. Close the IPython console where the script was running.
9. Now see that the text size in the newly created IPython Console has changed to it`s default value (e.g. 10), but in the settings the text size still stands on "11".
10. NOTE: When I remove the "tc =" from the script "debug.py" and run the code, the IPython Console text size remains on "11"... really strange.

### What is the expected output? What do you see instead?
I expect that the text size in the newly created IPython console will not change depending on the code in the script.


### Paste Traceback/Error Below (if applicable)
<!--- Copy from error dialog or View > Panes > Internal Console --->

```python-traceback

PASTE TRACEBACK HERE

```

## Versions
<!--- You can get this information from Help > About Spyder...
or (if Spyder won't launch) the "conda list" command
from the Anaconda Prompt/Terminal/command line. --->

* Spyder version: 5.4.2
* Python version: 3.10.9 64-bit
* Qt version: 5.15.6
* PyQt version: 5.15.7
* Operating System name/version: Microsoft Windows 10 64-bit

### Dependencies
<!--- Please go to the menu entry Help > Dependencies,
press the Copy to clipboard button and paste below --->

```
# Mandatory:
atomicwrites >=1.2.0          :  1.4.1 (OK)
chardet >=2.0.0               :  5.1.0 (OK)
cloudpickle >=0.5.0           :  2.2.1 (OK)
cookiecutter >=1.6.0          :  2.1.1 (OK)
diff_match_patch >=20181111   :  20200713 (OK)
intervaltree >=3.0.2          :  3.0.2 (OK)
IPython >=7.31.1;<9.0.0       :  8.11.0 (OK)
jedi >=0.17.2;<0.19.0         :  0.18.2 (OK)
jellyfish >=0.7               :  0.9.0 (OK)
jsonschema >=3.2.0            :  4.17.3 (OK)
keyring >=17.0.0              :  23.13.1 (OK)
nbconvert >=4.0               :  7.2.9 (OK)
numpydoc >=0.6.0              :  1.5.0 (OK)
paramiko >=2.4.0              :  3.1.0 (OK)
parso >=0.7.0;<0.9.0          :  0.8.3 (OK)
pexpect >=4.4.0               :  4.8.0 (OK)
pickleshare >=0.4             :  0.7.5 (OK)
psutil >=5.3                  :  5.9.4 (OK)
pygments >=2.0                :  2.14.0 (OK)
pylint >=2.5.0;<3.0           :  2.17.0 (OK)
pylint_venv >=2.1.1           :  3.0.1 (OK)
pyls_spyder >=0.4.0           :  0.4.0 (OK)
pylsp >=1.7.1;<1.8.0          :  1.7.1 (OK)
pylsp_black >=1.2.0           :  1.2.1 (OK)
qdarkstyle >=3.0.2;<3.1.0     :  3.0.3 (OK)
qstylizer >=0.2.2             :  0.2.2 (OK)
qtawesome >=1.2.1             :  1.2.3 (OK)
qtconsole >=5.4.0;<5.5.0      :  5.4.1 (OK)
qtpy >=2.1.0                  :  2.3.0 (OK)
rtree >=0.9.7                 :  1.0.1 (OK)
setuptools >=49.6.0           :  65.6.3 (OK)
sphinx >=0.6.6                :  6.1.3 (OK)
spyder_kernels >=2.4.2;<2.5.0 :  2.4.2 (OK)
textdistance >=4.2.0          :  4.5.0 (OK)
three_merge >=0.1.1           :  0.1.1 (OK)
watchdog >=0.10.3             :  3.0.0 (OK)
zmq >=22.1.0                  :  25.0.2 (OK)

# Optional:
cython >=0.21                 :  0.29.33 (OK)
matplotlib >=3.0.0            :  3.7.1 (OK)
numpy >=1.7                   :  1.24.2 (OK)
pandas >=1.1.1                :  1.5.3 (OK)
scipy >=0.17.0                :  1.10.1 (OK)
sympy >=0.7.3                 :  1.11.1 (OK)

```



Discussion:
Hey @Se3ri0us, thanks for reporting. I've also noticed this problem, but I don't know why it happens.

We'll try to fix it in our next version after 5.4.3 because I also think it's very annoying.

Resolving patch:
diff --git a/spyder/config/gui.py b/spyder/config/gui.py
--- a/spyder/config/gui.py
+++ b/spyder/config/gui.py
@@ -64,7 +64,7 @@ def get_family(families):
 
 def get_font(section='appearance', option='font', font_size_delta=0):
     """Get console font properties depending on OS and user options"""
-    font = FONT_CACHE.get((section, option))
+    font = FONT_CACHE.get((section, option, font_size_delta))
 
     if font is None:
         families = CONF.get(section, option+"/family", None)
@@ -82,7 +82,7 @@ def get_font(section='appearance', option='font', font_size_delta=0):
         size = CONF.get(section, option+'/size', 9) + font_size_delta
         font = QFont(family, size, weight)
         font.setItalic(italic)
-        FONT_CACHE[(section, option)] = font
+        FONT_CACHE[(section, option, font_size_delta)] = font
 
     size = CONF.get(section, option+'/size', 9) + font_size_delta
     font.setPointSize(size)
@@ -90,12 +90,17 @@ def get_font(section='appearance', option='font', font_size_delta=0):
 
 
 def set_font(font, section='appearance', option='font'):
-    """Set font"""
+    """Set font properties in our config system."""
     CONF.set(section, option+'/family', to_text_string(font.family()))
     CONF.set(section, option+'/size', float(font.pointSize()))
     CONF.set(section, option+'/italic', int(font.italic()))
     CONF.set(section, option+'/bold', int(font.bold()))
-    FONT_CACHE[(section, option)] = font
+
+    # This function is only used to set fonts that were changed through
+    # Preferences. And in that case it's not possible to set a delta.
+    font_size_delta = 0
+
+    FONT_CACHE[(section, option, font_size_delta)] = font
 
 
 def _config_shortcut(action, context, name, keystr, parent):


Test patch: