Ci sono varie cosette che "non vanno", in primo luogo il risultato di un "type" non sarà mai uguale a 'str'
Python 3.8.10 (default, Jun 22 2022, 20:18:18)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> value = 'Apelle'
>>> type(value)
<class 'str'>
>>> type(value) == 'str'
False
>>> 'str' in repr(type(value))
True
>>> type(type(value))
<class 'type'>
>>>
bisogna verificare se 'str' è contenuta nella rappresentazione di un oggetto restituito da type, si badi bene: oggetto, una richiesta diretta sul risultato di type darebbe un errore perché non sarebbe direttamente processabile come se fosse una stringa.
Per altro, sospetto che lo stralcio di codice proposto appartenga a qualcosa del genere
# -*- coding: utf-8 -*-
import tkinter as tk
def make_text(ptext):
print('ricevuto', ptext)
if type(ptext) == 'str':
tmp = ptext
elif type(ptext) == 'list':
tmp = '\n'.join([str(x) for x in plist])
else:
tmp = ''
lbl.configure(text=tmp)
lbl.update()
root.update()
root = tk.Tk()
lbl = tk.Label(root, text='')
lbl.grid(row=0, column=0, columnspan=3)
stringa = '1 2 3 4 5'
lista = ['Apelle', 'figlio', 'di', 'Apollo', 'fece', 'una', 'palla', '...']
bttext = tk.Button(root, text='Mostra stringa', command=make_text(stringa))
bttext.grid(row=1, column=0)
btlist = tk.Button(root, text='Mostra lista', command=make_text(lista))
btlist.grid(row=1, column=1)
btquit = tk.Button(root, text='Esci', command=root.destroy)
btquit.grid(row=1, column=2)
root.mainloop()
Se è questo il caso, la finestra verrà creata ma la pressione sui pulsanti non funzionerà perché i processi definenti il binding dei pulsanti verranno lanciati in fase di inizializzazione e basta, l'output che si avrebbe sarebbe questo
<class 'type'>
>>>
============= RESTART: /home/nuzzopippo/src/posts/renzo/esempio.py =============
ricevuto 1 2 3 4 5
ricevuto ['Apelle', 'figlio', 'di', 'Apollo', 'fece', 'una', 'palla', '...']
>>>
ed ottenuto senza intervento dell'user, la funzione verrebbe eseguita solo in fase di inizializzazione, per avere il risultato sperato bisognerebbe appoggiarsi a routines intermedie, si provi questo codice, funzionerà
# -*- coding: utf-8 -*-
import tkinter as tk
def update_text(ptext):
if 'str' in repr(type(ptext)):
tmp = ptext
elif 'list' in repr(type(ptext)):
tmp = '\n'.join([str(x) for x in ptext])
else:
tmp = ''
lbl.configure(text=tmp)
lbl.update()
root.update()
def make_text():
update_text(stringa)
def make_list():
update_text(lista)
root = tk.Tk()
lbl = tk.Label(root, text='')
lbl.grid(row=0, column=0, columnspan=3)
stringa = '1 2 3 4 5'
lista = ['Apelle', 'figlio', 'di', 'Apollo', 'fece', 'una', 'palla', '...']
bttext = tk.Button(root, text='Mostra stringa', command=make_text)
bttext.grid(row=1, column=0)
btlist = tk.Button(root, text='Mostra lista', command=make_list)
btlist.grid(row=1, column=1)
btquit = tk.Button(root, text='Esci', command=root.destroy)
btquit.grid(row=1, column=2)
root.mainloop()
Ovviamente, la sovrastante codifica è del tutto inefficiente nella implementazione di una GUI, se si utilizza tal tipo di codifica suggerirei di studiarsi (bene) le classi e gli eventi in tkinter prima di procedere oltre