Python Forum
how to insert image into Text widget Tkinter
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
how to insert image into Text widget Tkinter
#1
Hello;

I created a small application for testing, but I encountered a problem displaying the image in the content of the Tkinter Text widget.

In fact, I have two image and I wish that except for one of them which must appear in the contents according to the state of a checkbutton
Here are the two images I would like them to display in Text tkinter:

[Image: mj72.png]
or

[Image: 6dv6.png]

#######################################################

And this depending of the state of the checkbutton ( checkmark or not ticked )

If the checkbutton is marked, I would like the display to be like this image:

[Image: n2z7.png]

And in the case where the checkbutton is unchecked , I would like the display to be like this image:

[Image: 6f44.png]

And so on, the data will be modified according to the Entry box dedicated to the introduction of the monitor data. I would have at the end the content subdivided into several paragraphs, each of the paragraphs has a header image 1 or image 2 according to the state of the checkbutton

Here is the code of my application with python 3.6:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

from tkinter import *
import pathlib  #pour creer un dossier qui n'existe encore pas 
import sqlite3
import time
import datetime

root = Tk()
 
case_correction_ddm=IntVar()
ent_monitor_cev=StringVar()



#fonction pour la creation de la table cev
def CreerTable_cev():
	
	#creation du dossier "bdd/Test" pour la bdd test.db
	pathlib.Path('bdd/Test').mkdir(parents=True, exist_ok=True)
	
	conn1 = sqlite3.connect('bdd/Test/Test.db')
	curseur1 = conn1.cursor()
	curseur1.execute('''CREATE TABLE IF NOT EXISTS cev (id_cev INTEGER PRIMARY KEY,time_cev TEXT NOT NULL,lecture_monitor_cev    TEXT NOT NULL,chemin_vers_image_message_cev TEXT NOT NULL)''')
	curseur1.close()


# ajout des valeurs à la table cev par la commande du bouton "Executer"
def Add_To_Table_cev():
	global chemin_image_message_cev_get
	
	if case_correction_ddm.get () :
		chemin_image_message_cev_get='images/correction_approuvee.gif'
	else:	
		chemin_image_message_cev_get='images/correction_non_approuvee.gif'

	time_cev_get = str(time.strftime('%d/%m/%y  à  %H:%M:%S', time.localtime()))
	lecture_monitor_cev_get = str(ent_monitor_cev.get())	

	conn2 = sqlite3.connect('bdd/Test/Test.db')
	curseur2 = conn2.cursor()
	curseur2.execute('''INSERT INTO cev (time_cev,lecture_monitor_cev,chemin_vers_image_message_cev) VALUES (?,?,?)''',(time_cev_get,lecture_monitor_cev_get,chemin_image_message_cev_get))
	conn2.commit()
	curseur2.close()


# lecture du contenu de la table cev
def AfficherTable_cev():

    T_cev.delete('1.0', END)
    T_cev.update()

    conn3 = sqlite3.connect('bdd/Test/Test.db')
    curseur3 = conn3.cursor()     
    for resultats_cev in curseur3.execute('SELECT * FROM cev ORDER BY id_cev DESC'): 

        indice1_modifie=str(resultats_cev[1]).center(70)

        chaine_etoile="*************************************************************************************\n"

        contenu_table_cev= str(indice1_modifie)+"\n\n"+"ddm lue par Monitor  : "+ str(resultats_cev[2])+"\n\n"
		#chemin de l'image est donne par str(resultats_cev[3])
        photo=PhotoImage(file=str(resultats_cev[3]))
        T_cev.insert(INSERT, chaine_etoile)  
        T_cev.image_create(INSERT, image=photo)       	       
        T_cev.insert(END,contenu_table_cev) 
    
    curseur3.close()

#appel a la creation de la table cev
CreerTable_cev()

S_cev = Scrollbar(root)
T_cev = Text(root, height=25, width=90)
S_cev.pack(side=RIGHT, fill=Y)
T_cev.pack(side=LEFT, fill=Y)
S_cev.config(command=T_cev.yview)
T_cev.config(yscrollcommand=S_cev.set)

# affichage du contenu de la table cev
AfficherTable_cev()


entry_lecture_monitor=Entry(root,textvariable=ent_monitor_cev,font=('arial',12,'bold'))
entry_lecture_monitor.pack(side=BOTTOM,pady=10 )

bouton_executer=Button(root,text='Executer',command=lambda:[Add_To_Table_cev(),AfficherTable_cev()])
bouton_executer.pack(side=BOTTOM )
 
case_correction=Checkbutton(root,fg='black',variable=case_correction_ddm)
case_correction.configure(text="confirmation")
case_correction.pack(side=BOTTOM)
 
root.mainloop()
Thanks for the help
Reply
#2
First you must create an instance of Image:
myImage = Image("ImageFileType", name = "fileName")
Then you create an instance of Label; I found that counterintuitive as well. You pass the image object into the image parameter of the labels constructor:
myLabel = Label(root, image = myImage)
I'm new to tkinter myself. Please let me know whether this was helpful.
Reply
#3
Hi;
but my pictures are included inside Text widget and not into Label widget ; see the code after improving the comments :

#!/usr/bin/python3
# -*- coding: utf-8 -*-
 
from tkinter import *
import pathlib  #to create directory if not exits
import sqlite3
import time
import datetime
 
root = Tk()
  
case_correction_ddm=IntVar()
ent_monitor_cev=StringVar()
 

def CreerTable_cev():
     
    #create directories and sub directories "bdd/Test" for test.db
    pathlib.Path('bdd/Test').mkdir(parents=True, exist_ok=True)
     
    conn1 = sqlite3.connect('bdd/Test/Test.db')
    curseur1 = conn1.cursor()
    curseur1.execute('''CREATE TABLE IF NOT EXISTS cev (id_cev INTEGER PRIMARY KEY,time_cev TEXT NOT NULL,lecture_monitor_cev    TEXT NOT NULL,chemin_vers_image_message_cev TEXT NOT NULL)''')
    curseur1.close()
  
# add values to the cev table  by button "Run"
def Add_To_Table_cev():
    global chemin_image_message_cev_get
     
    if case_correction_ddm.get () :
        chemin_image_message_cev_get='images/correction_approuvee.gif'
    else:   
        chemin_image_message_cev_get='images/correction_non_approuvee.gif'
 
    time_cev_get = str(time.strftime('%d/%m/%y  à  %H:%M:%S', time.localtime()))
    lecture_monitor_cev_get = str(ent_monitor_cev.get())    
 
    conn2 = sqlite3.connect('bdd/Test/Test.db')
    curseur2 = conn2.cursor()
    curseur2.execute('''INSERT INTO cev (time_cev,lecture_monitor_cev,chemin_vers_image_message_cev) VALUES (?,?,?)''',(time_cev_get,lecture_monitor_cev_get,chemin_image_message_cev_get))
    conn2.commit()
    curseur2.close()
 
 
# reading the content of the cev table 
def AfficherTable_cev():
 
    T_cev.delete('1.0', END)
    T_cev.update()
 
    conn3 = sqlite3.connect('bdd/Test/Test.db')
    curseur3 = conn3.cursor()     
    for resultats_cev in curseur3.execute('SELECT * FROM cev ORDER BY id_cev DESC'): 
 
        indice1_modifie=str(resultats_cev[1]).center(70)
 
        chaine_etoile="*************************************************************************************\n"
 
        contenu_table_cev= str(indice1_modifie)+"\n\n"+"ddm lue par Monitor  : "+ str(resultats_cev[2])+"\n\n"
        #picture path is given by : str(resultats_cev[3])
        photo=PhotoImage(file=str(resultats_cev[3]))
        T_cev.insert(INSERT, chaine_etoile)  
        T_cev.image_create(INSERT, image=photo)                
        T_cev.insert(END,contenu_table_cev) 
     
    curseur3.close()
 
#call for the creation of the cev table
CreerTable_cev()
 
S_cev = Scrollbar(root)
T_cev = Text(root, height=25, width=90)
S_cev.pack(side=RIGHT, fill=Y)
T_cev.pack(side=LEFT, fill=Y)
S_cev.config(command=T_cev.yview)
T_cev.config(yscrollcommand=S_cev.set)
 
# display the content of the  table cev
AfficherTable_cev()
 

entry_lecture_monitor=Entry(root,textvariable=ent_monitor_cev,font=('arial',12,'bold'))
entry_lecture_monitor.pack(side=BOTTOM,pady=10 )
 
bouton_executer=Button(root,text='Run',command=lambda:[Add_To_Table_cev(),AfficherTable_cev()])
bouton_executer.pack(side=BOTTOM )
  
case_correction=Checkbutton(root,fg='black',variable=case_correction_ddm)
case_correction.configure(text="confirmation")
case_correction.pack(side=BOTTOM)
  
root.mainloop()
Reply
#4
Hi atlass218

Make following modifications and test it again:
# lecture du contenu de la table cev
def AfficherTable_cev():
 
    T_cev.delete('1.0', END)
    T_cev.update()
 
    root.images = []
    conn3 = sqlite3.connect('bdd/Test/Test.db')
    curseur3 = conn3.cursor()     
    for resultats_cev in curseur3.execute('SELECT * FROM cev ORDER BY id_cev DESC'): 
 
        indice1_modifie=str(resultats_cev[1]).center(70)
 
        chaine_etoile="*************************************************************************************\n"
 
        contenu_table_cev= str(indice1_modifie)+"\n\n"+"ddm lue par Monitor  : "+ str(resultats_cev[2])+"\n\n"
        #chemin de l'image est donne par str(resultats_cev[3])
        photo=PhotoImage(file=str(resultats_cev[3]))
        root.images.append(photo)
        T_cev.insert(INSERT, chaine_etoile)  
        T_cev.image_create(INSERT, image=photo)                
        T_cev.insert(END,contenu_table_cev) 
     
    curseur3.close()
wuf :-)
Reply
#5
My mistake. I must have been half asleep when I replied to your post, hence the misunderstanding. I should be more careful. Sadly, this is somewhat over my head, but I'll keep following this thread. I would like to add screenshots to the help section of my own application.
Reply
#6
Hi; keames
I tried the modified code you proposed to me and it worked Thanks

Normally, at the beginning I created my code with strings of characters:
-approved correction. (should be written in green color)
-correction not approved. (should be written in red color)
only one of these two strings of characters which should be displayed according to the state of the checkbutton.
when I tried the code, it did not work, that's why I introduced images instead of character strings

my question is what you can help me modify my code so that it is with strings of characters instead of images

thanks fr help
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Tkinter: An image and label are not appearing. emont 7 397 Mar-21-2024, 03:00 PM
Last Post: deanhystad
  TKinter Widget Attribute and Method Quick Reference zunebuggy 3 786 Oct-15-2023, 05:49 PM
Last Post: zunebuggy
  My Background Image Is Not Appearing (Python Tkinter) HailyMary 2 3,974 Mar-14-2023, 06:13 PM
Last Post: deanhystad
  [Tkinter] How to insert data json to treeview tkinter? Shakanrose 8 4,195 Jan-19-2023, 03:58 PM
Last Post: Shakanrose
  [Tkinter] Updating tkinter text BliepMonster 5 5,658 Nov-28-2022, 01:42 AM
Last Post: deanhystad
  [Tkinter] Image in Frame in Tabbed Widget Columbo 4 2,080 Sep-28-2022, 08:04 PM
Last Post: deanhystad
  simple tkinter question function call not opening image gr3yali3n 5 3,301 Aug-02-2022, 09:13 PM
Last Post: woooee
  [Tkinter] Tkinter don't change the image DQT 2 1,556 Jul-22-2022, 10:26 AM
Last Post: menator01
  [Tkinter] The Text in the Label widget Tkinter cuts off the Long text in the view malmustafa 4 4,665 Jun-26-2022, 06:26 PM
Last Post: menator01
  Tkinter Exit Code based on Entry Widget Nu2Python 6 2,871 Oct-21-2021, 03:01 PM
Last Post: Nu2Python

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020