4343 pyqtSignal , pyqtSlot
4444)
4545from PyQt5 .QtGui import (
46- QColor , QCursor , QFont , QKeyEvent , QKeySequence , QMouseEvent , QPalette ,
47- QPixmap , QResizeEvent , QTextBlock , QTextCursor , QTextDocument , QTextOption
46+ QColor , QCursor , QKeyEvent , QKeySequence , QMouseEvent , QPalette , QPixmap ,
47+ QResizeEvent , QTextBlock , QTextCursor , QTextDocument , QTextOption
4848)
4949from PyQt5 .QtWidgets import (
5050 QAction , QApplication , QFrame , QGridLayout , QHBoxLayout , QLabel , QLineEdit ,
@@ -329,10 +329,7 @@ def initEditor(self) -> None:
329329 SHARED .updateSpellCheckLanguage ()
330330
331331 # Set font
332- font = QFont ()
333- font .setFamily (CONFIG .textFont )
334- font .setPointSize (CONFIG .textSize )
335- self ._qDocument .setDefaultFont (font )
332+ self .initFont ()
336333
337334 # Update highlighter settings
338335 self ._qDocument .syntaxHighlighter .initHighlighter ()
@@ -382,6 +379,23 @@ def initEditor(self) -> None:
382379
383380 return
384381
382+ def initFont (self ) -> None :
383+ """Set the font of the main widget and sub-widgets. This needs
384+ special attention since there appears to be a bug in Qt 5.15.3.
385+ See issues #1862 and #1875.
386+ """
387+ font = self .font ()
388+ font .setFamily (CONFIG .textFont )
389+ font .setPointSize (CONFIG .textSize )
390+ self .setFont (font )
391+
392+ # Reset sub-widget font to GUI font
393+ self .docHeader .updateFont ()
394+ self .docFooter .updateFont ()
395+ self .docSearch .updateFont ()
396+
397+ return
398+
385399 def loadText (self , tHandle : str , tLine : int | None = None ) -> bool :
386400 """Load text from a document into the editor. If we have an I/O
387401 error, we must handle this and clear the editor so that we don't
@@ -2396,9 +2410,6 @@ def __init__(self, docEditor: GuiDocEditor) -> None:
23962410 iSz = SHARED .theme .baseIconSize
23972411 mPx = CONFIG .pxInt (6 )
23982412
2399- self .boxFont = SHARED .theme .guiFont
2400- self .boxFont .setPointSizeF (0.9 * SHARED .theme .fontPointSize )
2401-
24022413 self .setContentsMargins (0 , 0 , 0 , 0 )
24032414 self .setAutoFillBackground (True )
24042415 self .setFrameStyle (QFrame .Shape .StyledPanel | QFrame .Shadow .Plain )
@@ -2410,12 +2421,10 @@ def __init__(self, docEditor: GuiDocEditor) -> None:
24102421 # ==========
24112422
24122423 self .searchBox = QLineEdit (self )
2413- self .searchBox .setFont (self .boxFont )
24142424 self .searchBox .setPlaceholderText (self .tr ("Search for" ))
24152425 self .searchBox .returnPressed .connect (self ._doSearch )
24162426
24172427 self .replaceBox = QLineEdit (self )
2418- self .replaceBox .setFont (self .boxFont )
24192428 self .replaceBox .setPlaceholderText (self .tr ("Replace with" ))
24202429 self .replaceBox .returnPressed .connect (self ._doReplace )
24212430
@@ -2425,12 +2434,9 @@ def __init__(self, docEditor: GuiDocEditor) -> None:
24252434 self .searchOpt .setContentsMargins (0 , 0 , 0 , 0 )
24262435
24272436 self .searchLabel = QLabel (self .tr ("Search" ), self )
2428- self .searchLabel .setFont (self .boxFont )
24292437 self .searchLabel .setIndent (CONFIG .pxInt (6 ))
24302438
24312439 self .resultLabel = QLabel ("?/?" , self )
2432- self .resultLabel .setFont (self .boxFont )
2433- self .resultLabel .setMinimumWidth (SHARED .theme .getTextWidth ("?/?" , self .boxFont ))
24342440
24352441 self .toggleCase = QAction (self .tr ("Case Sensitive" ), self )
24362442 self .toggleCase .setCheckable (True )
@@ -2515,6 +2521,7 @@ def __init__(self, docEditor: GuiDocEditor) -> None:
25152521 self .replaceButton .setVisible (False )
25162522 self .adjustSize ()
25172523
2524+ self .updateFont ()
25182525 self .updateTheme ()
25192526
25202527 logger .debug ("Ready: GuiDocEditSearch" )
@@ -2598,7 +2605,9 @@ def setResultCount(self, currRes: int | None, resCount: int | None) -> None:
25982605 numCount = f"{ lim :n} +" if (resCount or 0 ) > lim else f"{ resCount :n} "
25992606 sCurrRes = "?" if currRes is None else str (currRes )
26002607 sResCount = "?" if resCount is None else numCount
2601- minWidth = SHARED .theme .getTextWidth (f"{ sResCount } //{ sResCount } " , self .boxFont )
2608+ minWidth = SHARED .theme .getTextWidth (
2609+ f"{ sResCount } //{ sResCount } " , SHARED .theme .guiFontSmall
2610+ )
26022611 self .resultLabel .setText (f"{ sCurrRes } /{ sResCount } " )
26032612 self .resultLabel .setMinimumWidth (minWidth )
26042613 self .adjustSize ()
@@ -2609,6 +2618,18 @@ def setResultCount(self, currRes: int | None, resCount: int | None) -> None:
26092618 # Methods
26102619 ##
26112620
2621+ def updateFont (self ) -> None :
2622+ """Update the font settings."""
2623+ self .setFont (SHARED .theme .guiFont )
2624+ self .searchBox .setFont (SHARED .theme .guiFontSmall )
2625+ self .replaceBox .setFont (SHARED .theme .guiFontSmall )
2626+ self .searchLabel .setFont (SHARED .theme .guiFontSmall )
2627+ self .resultLabel .setFont (SHARED .theme .guiFontSmall )
2628+ self .resultLabel .setMinimumWidth (
2629+ SHARED .theme .getTextWidth ("?/?" , SHARED .theme .guiFontSmall )
2630+ )
2631+ return
2632+
26122633 def updateTheme (self ) -> None :
26132634 """Update theme elements."""
26142635 qPalette = QApplication .palette ()
@@ -2793,10 +2814,6 @@ def __init__(self, docEditor: GuiDocEditor) -> None:
27932814 self .itemTitle .setAlignment (QtAlignCenterTop )
27942815 self .itemTitle .setFixedHeight (iPx )
27952816
2796- lblFont = self .itemTitle .font ()
2797- lblFont .setPointSizeF (0.9 * SHARED .theme .fontPointSize )
2798- self .itemTitle .setFont (lblFont )
2799-
28002817 # Other Widgets
28012818 self .outlineMenu = QMenu (self )
28022819
@@ -2850,6 +2867,7 @@ def __init__(self, docEditor: GuiDocEditor) -> None:
28502867 self .setContentsMargins (0 , 0 , 0 , 0 )
28512868 self .setMinimumHeight (iPx + 2 * mPx )
28522869
2870+ self .updateFont ()
28532871 self .updateTheme ()
28542872
28552873 logger .debug ("Ready: GuiDocEditHeader" )
@@ -2888,6 +2906,12 @@ def setOutline(self, data: dict[int, str]) -> None:
28882906 logger .debug ("Document outline updated in %.3f ms" , 1000 * (time () - tStart ))
28892907 return
28902908
2909+ def updateFont (self ) -> None :
2910+ """Update the font settings."""
2911+ self .setFont (SHARED .theme .guiFont )
2912+ self .itemTitle .setFont (SHARED .theme .guiFontSmall )
2913+ return
2914+
28912915 def updateTheme (self ) -> None :
28922916 """Update theme elements."""
28932917 self .tbButton .setThemeIcon ("menu" )
@@ -3001,9 +3025,6 @@ def __init__(self, parent: QWidget) -> None:
30013025 bSp = CONFIG .pxInt (4 )
30023026 hSp = CONFIG .pxInt (6 )
30033027
3004- lblFont = self .font ()
3005- lblFont .setPointSizeF (0.9 * SHARED .theme .fontPointSize )
3006-
30073028 # Cached Translations
30083029 self ._trLineCount = self .tr ("Line: {0} ({1})" )
30093030 self ._trWordCount = self .tr ("Words: {0} ({1})" )
@@ -3026,7 +3047,6 @@ def __init__(self, parent: QWidget) -> None:
30263047 self .statusText .setAutoFillBackground (True )
30273048 self .statusText .setFixedHeight (fPx )
30283049 self .statusText .setAlignment (QtAlignLeftTop )
3029- self .statusText .setFont (lblFont )
30303050
30313051 # Lines
30323052 self .linesIcon = QLabel ("" , self )
@@ -3041,7 +3061,6 @@ def __init__(self, parent: QWidget) -> None:
30413061 self .linesText .setAutoFillBackground (True )
30423062 self .linesText .setFixedHeight (fPx )
30433063 self .linesText .setAlignment (QtAlignLeftTop )
3044- self .linesText .setFont (lblFont )
30453064
30463065 # Words
30473066 self .wordsIcon = QLabel ("" , self )
@@ -3056,7 +3075,6 @@ def __init__(self, parent: QWidget) -> None:
30563075 self .wordsText .setAutoFillBackground (True )
30573076 self .wordsText .setFixedHeight (fPx )
30583077 self .wordsText .setAlignment (QtAlignLeftTop )
3059- self .wordsText .setFont (lblFont )
30603078
30613079 # Assemble Layout
30623080 self .outerBox = QHBoxLayout ()
@@ -3079,6 +3097,7 @@ def __init__(self, parent: QWidget) -> None:
30793097 self .setMinimumHeight (fPx + 2 * mPx )
30803098
30813099 # Fix the Colours
3100+ self .updateFont ()
30823101 self .updateTheme ()
30833102
30843103 # Initialise Info
@@ -3092,6 +3111,14 @@ def __init__(self, parent: QWidget) -> None:
30923111 # Methods
30933112 ##
30943113
3114+ def updateFont (self ) -> None :
3115+ """Update the font settings."""
3116+ self .setFont (SHARED .theme .guiFont )
3117+ self .statusText .setFont (SHARED .theme .guiFontSmall )
3118+ self .linesText .setFont (SHARED .theme .guiFontSmall )
3119+ self .wordsText .setFont (SHARED .theme .guiFontSmall )
3120+ return
3121+
30953122 def updateTheme (self ) -> None :
30963123 """Update theme elements."""
30973124 iPx = round (0.9 * SHARED .theme .baseIconHeight )
0 commit comments