Hangs after maybe between 4 and 50 screen rewrites. sometimes CTRL C under Ubuntu starts it up again. Click go rewrites al the fonts the thing can find in a few windows.... Repeated.
TKinter has a cult following. I don''t really expect others to fix my problems, but you know, es since its a cult thing to love TCL ( or something .... ) Here is is. Same on two different computers in Python 3.6 and 3.8 Plus I suppose you get to see for sure all your finest fonts as rendered in a real TK thing, not that this changes the worlds so much. Thanks for the advice so far... Regards, Dan Kolis # Code version 18Jan2023 19:48 EST Dan Kolis # Click 'go' on main page. when run over and over after a while it freezes import tkinter as tk from tkinter import ttk from tkinter import font as luFont # Empty object maker ( M T ) ... get it say it ! class MT(): pass # Module level variables mod = MT() mod.itsPlaces = MT() mod.itsPlaces = [] # Apply XY Size to things like windows, variable place 31Jul22 def apply_Width_Height_Position( toThis, aWidth, aHeight, *argsPlace ): # Width and height is expected # Argument overflow is quite variable size is it its usual hint for me aLen = len( argsPlace ) # Sometimes, just width and height are given ( not that + position ) wAndH = str( int( aWidth ) ) +'x' + str( int( aHeight ) ) # Size has a funny text line interface toThis.geometry( wAndH ) # Apply # Sometimes position too if aLen == 2: eP = "+" + str( argsPlace[ 0 ] ) + "+" + str( argsPlace[ 1 ] ) param4 = wAndH + eP # Combine size and position toThis.geometry( param4 ) # Apply jjjjjj = 560 # Create local toplevel to whoever calls me 11Dec22 bc-endive def make_Tk_Window( sReason, *attribKc ): # Top level window maker and rememberer # Kc = 'Kind code' aCode = "na" # Not available if attribKc: aCode = attribKc [ 0 ] # Better code then 'na' # Make window ansWin = tk.Toplevel() # Keep track of this creation step newEntry = {} newEntry[ 'tkaddress' ] = ansWin # Real TK window accessor newEntry[ 'ideanamed' ] = sReason # Casual description newEntry[ 'kindcode' ] = aCode # So can be worked with together mod.itsPlaces.append( newEntry ) return ansWin # Idle time rewrite def justRedisplayNow( wThings, *argsR ): # Redisplay a named tj thing # Dont use this frivolously, if it's needed its here you have to study it wThings.update() # Look at fonts possible 6Oct22 def showAllFonts(): # Show fonts possible mod.lines_In_Window = 30; mod.window_Seq_Number = 1 # What we want to see mod.seeFonts = list( luFont.families() ) mod.seeFonts.sort() # Alpha order is nice # Fill windows as a look at me report try: populateW() except: tttttt = 456 rrrrrr = 245 # Show fonts regarding avoiding BAD ones that crash, etc size limits in buffers too 19Dec22 def populateW(): # Put in the fonts aLen = len( mod.seeFonts ) # Fun to know, debug really last_considered_name = "gghfjhljfl" # Don't show doubles # Loop through all fonts the system named thisPassMakeWindow = True; a_Line_Count = 0; list_Number = 0 for item in mod.seeFonts: # Multiple windows ( Python has funny ideas on this, ok like this ) if thisPassMakeWindow: winTk_Now = winMakerFontsW(); thisPassMakeWindow = False; a_Line_Count = 0 # We gots one now if a_Line_Count < mod.lines_In_Window: # Will a window we made list_Number += 1 # Counts aN = str( list_Number ) + " "; name_In_lower = item.lower() # Various reasons to not render this one isOk = True if name_In_lower == last_considered_name: isOk = False a_Bad_Thing = name_In_lower.find( 'emoji' ) > -1 if a_Bad_Thing: isOk = False a_Bad_Thing = item.find( 'Noto Sans Mono CJK' ) > -1 if a_Bad_Thing: isOk = False # Good good if isOk: label = "listlabel" + str( list_Number ) label = tk.Label( winTk_Now, text=aN + item, font=( item, 18 ), anchor='w' ).pack() a_Line_Count += 1 last_considered_name = name_In_lower else: justRedisplayNow( winTk_Now ) thisPassMakeWindow = True; mod.window_Seq_Number += 1 # New window next time # Done a_Msg = "on this machine" # Look at fonts possible 6Oct22 def showAllFonts(): # Show fonts possible mod.lines_In_Window = 30; mod.window_Seq_Number = 1 # What we want to see mod.seeFonts = list( luFont.families() ) mod.seeFonts.sort() # Alpha order is nice # Fill windows as a look at me report try: populateW() except: tttttt = 456 rrrrrr = 245 # Just window shape aka size def applyWidthHeight( toThis, aWidth, aHeight ): # TK window size no change in code anyway, to placement # Op sys like thing likes this x that numbers wAndH = str( int( aWidth ) ) +'x' + str( int( aHeight ) ) # Size toThis.geometry( wAndH ) # Apply tttttt = 385 # Window making def winMakerFontsW(): # Window with scroll bars, etc canvassy, ready to fill up # The real window gets created mInf = ' ' + str( mod.window_Seq_Number ) wsFr = make_Tk_Window( 'Font peek' + mInf, 'fontpeek' ); wsFr.title( 'Fonts' + mInf ) start_Hor = 50; Kh = 110; start_Ver = 35; Kv = 40 moved_Some_H = start_Hor + ( mod.window_Seq_Number * ( Kh - 1 ) ) moved_Some_V = start_Ver + ( mod.window_Seq_Number * ( Kv - 1 ) ) apply_Width_Height_Position( wsFr, 480, 500, moved_Some_H, moved_Some_V ) # Canvas is the form pretty much my_Canvas = tk.Canvas( wsFr, borderwidth=0 ) myFrm = tk.Frame( my_Canvas ) # Now the 'do it on me' thing # Vertical scroll bars go onto form vsb = tk.Scrollbar( wsFr, orient="vertical", command=my_Canvas.yview ) my_Canvas.configure( yscrollcommand=vsb.set ) # Assemble via relations of pieces vsb.pack( side="right", fill="y" ) my_Canvas.pack( side="left", fill="both", expand=True ) my_Canvas.create_window( (4, 4 ), window=myFrm, anchor="nw" ) return myFrm def callIt(): # A click do it showAllFonts() # This is main root = tk.Tk() applyWidthHeight( root, 300, 300 ) b1 = tk.Button( root, text='go', command=callIt ) b1.grid( row=0, column=0 ) root.mainloop() -- https://mail.python.org/mailman/listinfo/python-list