Out of the box it seems that the demo app examples for PySimpleGui display with an "ugly" font when using Linux (Ubuntu 20.10).
As I cannot find any references how to control this in the demo examples provided, such as default_font = 'Helvetica'
), it seems, implicitly, those examples assumes the default font setting should already be correct.
To try solving it, I have installed Helvetica
and default Windows fonts, but it is still showing different to examples depicted online.
Below example is obviously not Helvetica.
How do I solve this?
import PySimpleGUI as sg
'''
App that shows "how fonts work in PySimpleGUI".
'''
layout = [[sg.Text('This is my sample text', size=(20, 1), key='-text-')],
[sg.CB('Bold', key='-bold-', change_submits=True),
sg.CB('Italics', key='-italics-', change_submits=True),
sg.CB('Underline', key='-underline-', change_submits=True)],
[sg.Slider((6, 50), default_value=12, size=(14, 20),
orientation='h', key='-slider-', change_submits=True),
sg.Text('Font size')],
[sg.Text('Font string = '), sg.Text('', size=(25, 1), key='-fontstring-')],
[sg.Button('Exit')]]
window = sg.Window('Font string builder', layout)
text_elem = window['-text-']
while True: # Event Loop
event, values = window.read()
if event in (sg.WIN_CLOSED, 'Exit'):
break
font_string = 'Helvitica '
font_string += str(int(values['-slider-']))
if values['-bold-']:
font_string += ' bold'
if values['-italics-']:
font_string += ' italic'
if values['-underline-']:
font_string += ' underline'
text_elem.update(font=font_string)
window['-fontstring-'].update('"'+font_string+'"')
print(event, values)
window.close()
Update: In addition the below answer, it also seems to be a known problem if you use an Anaconda / conda environment. I deleted Anaconda from my system and ran a pipenv
environment instead, and it worked.
I noticed it when I ran below code and hardly any fonts where showing, meanwhile in a 'normal' environment it matches FontManager's list of fonts.
from tkinter import Tk, font
root = Tk()
font_tuple = font.families()
root.destroy()
for font in font_tuple:
print(font)
sg.Text.fonts_installed_list()
will return a list of the font families so you don't need to call tkinter directly. It's a class method so don't need to do anything but make the call directly. – Petrolatum