TKinter in Python - advanced notions

Dan Kolis dankolis at gmail.com
Wed Jun 21 09:47:56 EDT 2023


Hi,

I've write a huge biotech program ( an IDE for synthetic biology ), and am slowly outgrowing TKINTER.

Has anybody out there merged a little bit of TCL direct calls from Python 3.X to get more freedom then TKINTER for just some Windows ?

How about bold stories of successes ( yours, not mine ) on porting to stupid MS Windows from linux ?

Adding threading makes TKinter hard ( but not impossible ) to manage. Also, a little bit here and there obviously exceeds TKINTERs goals.

I wish it looked better, but its 'ok'. I believe X11 IO is considerably superior for serious work the HTML.  I mean 'serious' work. with lots of multi media windows. I am not talking about fb "Oh ! There is a window it opened inthe corner !"... trivial functionality.

Must be a uber expert out there. Is it you ?

As attached. and little code. Coloring text makes me realise; some of this is pretty indirect, though this is quite well thought out, like all of TKINTER.

Regards,
Daniel B. Kolis


"""
An important worked example of text color and other look dynamic changes.
This is the righ way to do this for fast changes ! 
20 Jun 2023 22:11
"""

import tkinter as tk
from tkinter.font import Font

class Pad(  tk.Frame  ):

    def __init__( self, parent, *args, **kwargs ):
        tk.Frame.__init__(  self, parent, *args, **kwargs  )

        self.toolbar = tk.Frame( self, bg="#eee" )
        self.toolbar.pack( side="top", fill="x" )

        self.bold_btn = tk.Button( self.toolbar, text="CHANGE highlighted", command=self.make_Change_Highlighted )
        self.bold_btn.pack( side="left" )

        self.bold_btn = tk.Button( self.toolbar, text="CHANGE H.B.", command=self.make_Change_Hb )
        self.bold_btn.pack( side="left" )

        self.bold_btn = tk.Button( self.toolbar, text="Delete a char", command=self.make_Change_Delete )
        self.bold_btn.pack( side="left" )

        self.clear_btn = tk.Button( self.toolbar, text="Clear", command=self.clear_Some )
        self.clear_btn.pack( side="left" )

        # Applies this font
        self.bold_font = Font( family="Helvetica", size=14, weight="bold" )

        self.da_Text = tk.Text( self )
        self.da_Text.insert( "end", "Selectable parts of text is fun.\nSo is a happy birthday, right ?"  )
        self.da_Text.focus(  )
        self.da_Text.pack( fill="both", expand=True )

        # configuring a tag called dingo-something
        self.da_Text.tag_configure( "reddingo",  font=self.bold_font, foreground = "Red"  )
        self.da_Text.tag_configure( "bluedingo", font=self.bold_font, background = "Yellow", foreground = "Blue"  )


    # Button CB
    def make_Change_Delete( self ):

        self.da_Text.delete( '1.0', '1.1' )


    # Button CB
    def make_Change_Highlighted( self ):

        # tk.TclError exception is raised if not text is selected
        try:
           self.da_Text.tag_add( "reddingo", "sel.first", "sel.last" )        

        except tk.TclError:
           tttttt = 569


    # Button CB        
    def make_Change_Hb( self ):

        try:
            lin_Idx = 2; col_Idx = 8
            self.da_Text.tag_add( "bluedingo", f"{ lin_Idx }.{ col_Idx }", 
                                           f"{ lin_Idx }.{ col_Idx + len(  'happy birthday'  ) }"  )
        except:
            gggggg = 457

    # Button CB
    def clear_Some( self ):
       self.da_Text.tag_remove( "reddingo",  "1.0", 'end' )
       self.da_Text.tag_remove( "bluedingo",  "1.0", 'end' )


# Main body really
def is_Main():
    root = tk.Tk()
    Pad( root ).pack( expand=1, fill="both" )
    root.mainloop()

# Go
if __name__ == "__main__":
    is_Main()


Document end

my ref: 21 Jun 2023, https://groups.google.com/g/comp.lang.python, Daniel B. Kolis, nafl






More information about the Python-list mailing list