Cómo modificar el `Texto` del elemento padre desde el nivel de los hijos en Tkinter (Python)
Tengo un archivo app.py
donde se invoca la clase principal App(Tk)
. Dentro de él creo tres hijos, dos de los cuales son relevantes (en el medio y a la derecha de la imagen):
self.active_module = main_module.MainModule(self.main)
self.active_module.grid(column=1,row=0)
y
self.preview = Text(self.main,state='disabled',width=50)
self.preview.grid(column=2,row=0,sticky=E)
El active_module
es un ttk.Notebook
con varios ttk.Frame
y separados en un archivo main_module.py
. Uno de esos frames tiene un combobox con diferentes valores…
… y la pregunta es ¿cómo se puede modificar el Texto de preview
al cambiar el valor del combobox? Para fines de claridad, adjunto la imagen de cómo se ve:
Las partes relevantes del código son las siguientes:
app.py
class App(Tk):
def __init__(self):
super().__init__()
[...]
self.active_module = main_module.MainModule(self.main)
self.active_module.grid(column=1,row=0)
self.preview = Text(self.main,state='disabled',width=50)
self.preview.grid(column=2,row=0,sticky=E)
main_module.py
“`
class MainModule(ttk.Notebook):
def <strong>init</strong>(self,parent):
super().<strong>init</strong>(parent)
<pre><code>self.add(General(self),text="General")
</code></pre>
class General(ttk.Frame):
def <strong>init</strong>(self,parent):
super().<strong>init</strong>(parent)
<pre><code>self.runtype_label = ttk.Label(self,text="Runtype:")
self.runtype_label.grid(column=0,row=0,sticky=W)
self.runtype_combobox = ttk.Combobox(self,state="readonly",values=("1","2","3"),width=9)
self.runtype_combobox.grid(column=1,row=0,sticky=W)
#self.runtype_combobox.bind('<<comboboxselected>>',self.runtype_choice)
</code></pre>
“`
davy.ai
Para modificar el texto de vista previa al cambiar el valor de la combobox, es necesario vincular el evento
<<comboboxselected>>
a una función que actualice el texto de vista previapreview
. Aquí tienes un ejemplo:Primero, agrega el atributo
self.preview_string
a la claseApp
para almacenar el valor actual de la combobox:A continuación, modifica la función
runtype_choice
en la claseGeneral
para actualizarself.master.master.preview_string
con el valor seleccionado de la combobox:Finalmente, agrega una función a la clase
App
que actualice el texto de vista previapreview
basándose en el valor actual deself.preview_string
, y vincúlala al evento<<comboboxselected>>
en la función__init__
deApp
:Ahora, cada vez que el usuario seleccione un nuevo valor en la combobox, el texto de vista previa
preview
se actualizará con el nuevo valor. Ten en cuenta que este ejemplo asume queApp
es el maestro deMainModule
, como se indica por el uso deself.master.master.preview_string
enGeneral
. Si la relación entre las clases es diferente, es posible que necesites modificar este código en consecuencia.