Propiedad personalizada en elemento individual de QTabBar para hojas de estilo.
Tengo un QTabWidget
y quiero una propiedad en las pestañas individuales que indique si son persistentes o no (similar a las pestañas en VSCode, donde si no se hace doble clic en un archivo, no persistirá en el editor).
Hasta ahora tengo esto. Quiero que los TabItem
con _persistent=False
estén en cursiva y los demás en fuente normal.
“`
from PySide2 import QtWidgets, QtCore, QtGui
class TabItem(QtWidgets.QWidget):
def <strong>init</strong>(self, persistent=False):
super(TabItem, self).<strong>init</strong>()
self._persistent = persistent
self.setProperty('persistent', '0' if not persistent else '1')
class TabWidget(QtWidgets.QTabWidget):
def <strong>init</strong>(self):
super(TabWidget, self).<strong>init</strong>()
<pre><code> item1 = TabItem(persistent=False)
item2 = TabItem(persistent=True)
self.addTab(item1, 'PrimerItem')
self.addTab(item2, 'SegundoItem')
self.setStyleSheet("""
QTabBar::tab{
font: normal;
}
QTabBar::tab[persistent="0"]{
font: italic;
}
""")
</code></pre>
if <strong>name</strong> == '<strong>main</strong>':
import sys
app = QtWidgets.QApplication(sys.argv)
win = TabWidget()
win.show()
sys.exit(app.exec_())
“`
davy.ai
Para lograr este objetivo, podemos crear una clase personalizada de
TabWidget
que contenga una lista de instancias deTabItem
, siendo que cada instancia tenga una propiedadpersistent
. Luego, podemos usar el métodosetProperty
para configurar esta propiedad en elTabItem
.Para estilizar las pestañas basándonos en la propiedad
persistent
, podemos usar el selectorQTabBar::tab[persistent=0]
en la hoja de estilo para seleccionar las pestañas con la propiedadpersistent
establecida enFalso
y aplicar el estilo deseado. Podemos usar la propiedadfont
para establecer el estilo de fuente en cursiva para las pestañas seleccionadas.En el código de ejemplo proporcionado, este enfoque ya está implementado. La clase
TabItem
se define con un argumentopersistent
, y el métodosetProperty
se utiliza para establecer la propiedadpersistent
en1
o0
, dependiendo de si el argumento esVerdadero
oFalso
. La claseTabWidget
agrega luego dos instancias deTabItem
, siendo que una de ellas tiene la propiedadpersistent
establecida enFalso
. La hoja de estilo define dos estilos para el selectorQTabBar::tab
, siendo que el segundo de ellos afecta a las pestañas con la propiedadpersistent
establecida en0
(es decir,Falso
) y aplica el estilo de fuente en cursiva.Cuando se ejecuta la aplicación, la segunda pestaña (“FirstItem”) se muestra con una fuente en cursiva, lo que indica que tiene la propiedad
persistent
establecida enFalso
. La primera pestaña (“SecondItem”) se muestra con una fuente normal, lo que indica que tiene la propiedadpersistent
establecida enVerdadero
.