def __init__(self, template, character, parent=None):
		super(MeritWidget, self).__init__(template, character, parent)

		self.__layout = QVBoxLayout()
		self.setLayout( self.__layout )

		self.__toolBox = QToolBox()
		## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben.
		self.__toolBox.setObjectName("transparentWidget")
		## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
		if os.name == "nt":
			self.__toolBox.setStyleSheet( "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }" )
		self.__layout.addWidget(self.__toolBox)

		self.__typ = "Merit"
		categories = []
		categories.extend(Config.CATEGORIES_MERITS)
		categories.extend(self._storage.categories(self.__typ))
		# Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt.
		categories = ListTools.uniqify_ordered(categories)

		# Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
		self.__categoryIndex = {}

		# Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen.
		for item in categories:
			# Für jede Kategorie wird ein eigener Abschnitt erzeugt.
			widgetMeritCategory = QWidget()
			## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
			widgetMeritCategory.setObjectName("transparentWidget")

			layoutMeritCategory = QVBoxLayout()
			widgetMeritCategory.setLayout( layoutMeritCategory )

			self.__toolBox.addItem( widgetMeritCategory, item )
			self.__categoryIndex[item] = self.__toolBox.count() - 1
			#Debug.debug(self.__categoryIndex)

			__list = list( self._character.traits[self.__typ][item].items() )
			__list.sort()
			for merit in __list:
				#Debug.debug(merit)
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = CharaTrait( merit[1], self )
				traitWidget.setSpecialtiesHidden(True)
				if not merit[1].custom:
					traitWidget.setDescriptionHidden(True)

				# Bei Merits sind nur bestimmte Werte erlaubt.
				#Debug.debug(self._storage.traits[self.__typ][item][merit[0]])
				traitWidget.setPossibleValues(self._storage.traits[self.__typ][item][merit[1].identifier]["values"])

				# Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt.
				self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)

				layoutMeritCategory.addWidget( traitWidget )

				merit[1].valueChanged.connect(self.countMerits)
				#self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species)


			# Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
			layoutMeritCategory.addStretch()

		self.setMinimumWidth(Config.TRAIT_WIDTH_MIN)

		self._character.speciesChanged.connect(self.countMerits)
    def __init__(self, template, character, parent=None):
        super(SkillWidget, self).__init__(template, character, parent)

        self.__layout = QVBoxLayout()
        self.setLayout(self.__layout)

        self.__scrollArea = QScrollArea()
        ## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben.
        self.__scrollArea.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self.__scrollArea.setStyleSheet(
                "QWidget#transparentWidget { background: transparent; }")
        self.__layout.addWidget(self.__scrollArea)

        self.__scrollLayout = QVBoxLayout()

        self.__scrollWidget = QWidget()
        ## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben. Indem ich den selben Namen wie zuvor vergebe, wirkt auch das Stylsheet auf dieses Widget.
        self.__scrollWidget.setObjectName("transparentWidget")
        #self.__scrollWidget.setStyleSheet( "QWidget#transparentWidget { background-color:transparent; }" )
        #scrollWidget.setMinimumSize(this.width(), 400);
        self.__scrollWidget.setLayout(self.__scrollLayout)

        typ = "Skill"

        ## Eine Liste, in der alle Eigenschafts-Widgets aufgelistet werden.
        self.__traitWidgets = []

        for item in Config.CATEGORIES_MAIN:
            #Debug.debug(self._character.traits)

            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetSkillCategory = QGroupBox()
            widgetSkillCategory.setTitle(item)
            widgetSkillCategory.setFlat(True)

            layoutSkillCategory = QVBoxLayout()
            widgetSkillCategory.setLayout(layoutSkillCategory)

            self.__scrollLayout.addWidget(widgetSkillCategory)

            __list = list(self._character.traits[typ][item].items())
            __list.sort()
            for skill in __list:
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = CharaTrait(skill[1], self)
                traitWidget.buttonText = 0
                traitWidget.setDescriptionHidden(True)
                traitWidget.enableButton(
                    0
                )  # Zu Beginn sollen die Spezailisierungen nicht enabled sein.

                # Dieses Widget auch an Liste anhängen, damit ich einfacher darauf zugreifen kann.
                traitListItem = traitWidget
                self.__traitWidgets.append(traitListItem)

                # Es werden nur Fertigkeiten der richtigen Alters- und Zeit-Kategorie angezeigt.
                self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)
                # Fertigkeiten haben Spezialisierungen.
                traitWidget.specialtiesClicked.connect(
                    self.uncheckOtherButtons)
                traitWidget.specialtiesClicked.connect(
                    self.specialtiesActivated.emit)
                ## Wenn sich die Spezialisierungen ändern, sollen die veränderten Spezialisierungen auch angezeigt werden. Das wird so gelöst, als wäre der Knopf für die Spezialisierungen erneut gedrückt worden.
                #skill.specialtiesChanged.connect(self.emitSpecialtiesActivated)

                layoutSkillCategory.addWidget(traitWidget)

                self.maxTraitChanged.connect(traitWidget.setMaximum)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            self.__scrollLayout.addStretch()

        self.__scrollArea.setWidget(self.__scrollWidget)
        self.__scrollArea.setWidgetResizable(True)
        self.__scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
        self.__scrollArea.setMinimumWidth(
            self.__scrollArea.viewport().minimumWidth())
	def __init__(self, template, character, parent=None):
		super(SkillWidget, self).__init__(template, character, parent)

		self.__layout = QVBoxLayout()
		self.setLayout( self.__layout )

		self.__scrollArea = QScrollArea()
		## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben.
		self.__scrollArea.setObjectName("transparentWidget")
		## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
		if os.name == "nt":
			self.__scrollArea.setStyleSheet( "QWidget#transparentWidget { background: transparent; }" )
		self.__layout.addWidget( self.__scrollArea)

		self.__scrollLayout = QVBoxLayout()

		self.__scrollWidget = QWidget()
		## Die Auflistung der Fertigkeiten soll auch unter Windows einen transparenten Hintergrund haben. Indem ich den selben Namen wie zuvor vergebe, wirkt auch das Stylsheet auf dieses Widget.
		self.__scrollWidget.setObjectName("transparentWidget")
		#self.__scrollWidget.setStyleSheet( "QWidget#transparentWidget { background-color:transparent; }" )
		#scrollWidget.setMinimumSize(this.width(), 400);
		self.__scrollWidget.setLayout(self.__scrollLayout)

		typ = "Skill"

		## Eine Liste, in der alle Eigenschafts-Widgets aufgelistet werden.
		self.__traitWidgets = []

		for item in Config.CATEGORIES_MAIN:
			#Debug.debug(self._character.traits)

			# Für jede Kategorie wird ein eigener Abschnitt erzeugt.
			widgetSkillCategory = QGroupBox()
			widgetSkillCategory.setTitle(item)
			widgetSkillCategory.setFlat(True)

			layoutSkillCategory = QVBoxLayout()
			widgetSkillCategory.setLayout( layoutSkillCategory );

			self.__scrollLayout.addWidget( widgetSkillCategory )

			__list = list( self._character.traits[typ][item].items() )
			__list.sort()
			for skill in __list:
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = CharaTrait( skill[1], self )
				traitWidget.buttonText = 0
				traitWidget.setDescriptionHidden( True )
				traitWidget.enableButton(0)	# Zu Beginn sollen die Spezailisierungen nicht enabled sein.

				# Dieses Widget auch an Liste anhängen, damit ich einfacher darauf zugreifen kann.
				traitListItem = traitWidget
				self.__traitWidgets.append(traitListItem)

				# Es werden nur Fertigkeiten der richtigen Alters- und Zeit-Kategorie angezeigt.
				self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)
				# Fertigkeiten haben Spezialisierungen.
				traitWidget.specialtiesClicked.connect(self.uncheckOtherButtons)
				traitWidget.specialtiesClicked.connect(self.specialtiesActivated.emit)
				## Wenn sich die Spezialisierungen ändern, sollen die veränderten Spezialisierungen auch angezeigt werden. Das wird so gelöst, als wäre der Knopf für die Spezialisierungen erneut gedrückt worden.
				#skill.specialtiesChanged.connect(self.emitSpecialtiesActivated)

				layoutSkillCategory.addWidget( traitWidget )

				self.maxTraitChanged.connect(traitWidget.setMaximum)

			# Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
			self.__scrollLayout.addStretch()

		self.__scrollArea.setWidget(self.__scrollWidget)
		self.__scrollArea.setWidgetResizable(True)
		self.__scrollArea.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
		self.__scrollArea.setMinimumWidth(self.__scrollArea.viewport().minimumWidth())
    def __init__(self,
                 template,
                 character,
                 typ,
                 isCheckable=False,
                 parent=None):
        super(CategoryWidget, self).__init__(parent)

        self.__storage = template
        self.__character = character

        self._layout = QVBoxLayout()
        self.setLayout(self._layout)

        self._toolBox = QToolBox()
        ## Die Auflistung der Widgets soll auch unter Windows einen transparenten Hintergrund haben.
        self._toolBox.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self._toolBox.setStyleSheet(
                "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }"
            )

        self._layout.addWidget(self._toolBox)

        self._typ = typ
        categories = self.__storage.categories(self._typ)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        # {
        # 	Index: [Widget, Eigenschaft1, Eigenschaft2, ...]
        # }
        self._toolBoxPageList = {}

        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetCategory.setObjectName("transparentWidget")

            layoutCategory = QVBoxLayout()

            widgetCategory.setLayout(layoutCategory)

            ## In dieser Liste sammle ich die Widgets, damit sie später bei Bedarf in die ToolBox eingefügt werden können.
            self._toolBoxPageList[item] = [widgetCategory]

            __list = list(self.__character.traits[self._typ][item].items())
            __list.sort()
            for trait in __list:
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = None
                if isCheckable:
                    traitWidget = CheckTrait(trait[1], self)
                else:
                    traitWidget = CharaTrait(trait[1], self)
                    traitWidget.setSpecialtiesHidden(True)
                if type(trait) != StandardTrait or not trait[1].custom:
                    traitWidget.setDescriptionHidden(True)

                self._toolBoxPageList[item].append(trait[1])

                layoutCategory.addWidget(traitWidget)

                self.__character.traitVisibleReasonChanged.connect(
                    traitWidget.hideOrShowTrait)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutCategory.addStretch()
        #Debug.debug(self._toolBoxPageList)
        self.__character.speciesChanged.connect(self.hideOrShowToolPage)
        self.__character.breedChanged.connect(self.hideOrShowToolPage)
        self.__character.factionChanged.connect(self.hideOrShowToolPage)
    def __init__(self, template, character, parent=None):
        super(AttributeWidget, self).__init__(template, character, parent)

        self.__layout = QVBoxLayout()
        self.setLayout(self.__layout)

        self.__layoutAttributes = QGridLayout()
        self.__layout.addLayout(self.__layoutAttributes)

        self.__labelPower = QLabel("<b>" + self.tr("Power") + "</b>")
        self.__labelPower.setAlignment(Qt.AlignRight)

        self.__labelFinesse = QLabel("<b>" + self.tr("Finesse") + "</b>")
        self.__labelFinesse.setAlignment(Qt.AlignRight)

        self.__labelResistance = QLabel("<b>" + self.tr("Resistance") + "</b>")
        self.__labelResistance.setAlignment(Qt.AlignRight)

        actualRow = 1
        actualColumn = 0

        self.__layoutAttributes.addWidget(self.__labelPower, actualRow,
                                          actualColumn)
        actualRow += 1
        self.__layoutAttributes.addWidget(self.__labelFinesse, actualRow,
                                          actualColumn)
        actualRow += 1
        self.__layoutAttributes.addWidget(self.__labelResistance, actualRow,
                                          actualColumn)

        self.__labelStr = QLabel(self)
        self.__labelDex = QLabel(self)
        self.__labelSta = QLabel(self)
        self.__labelMan = QLabel(self)

        #connect( self, SIGNAL( speciesChanged( bool ) ), labelStr, SLOT( setHidden( bool ) ) )
        #connect( self, SIGNAL( speciesChanged( bool ) ), labelDex, SLOT( setHidden( bool ) ) )
        #connect( self, SIGNAL( speciesChanged( bool ) ), labelSta, SLOT( setHidden( bool ) ) )
        #connect( self, SIGNAL( speciesChanged( bool ) ), labelMan, SLOT( setHidden( bool ) ) )

        for item in Config.ATTRIBUTES:
            #Debug.debug(self._character.traits)

            actualColumn += 1

            vLine = QFrame(self)
            vLine.setFrameStyle(QFrame.VLine)
            self.__layoutAttributes.addWidget(vLine, 1, actualColumn,
                                              len(item[1]), 1, Qt.AlignHCenter)

            self.__layoutAttributes.setColumnStretch(actualColumn, 1)

            # Jetzt sind wir in der Spalte für die tatsächlchen Attribute
            actualColumn += 1

            # Aber zuerst kommt die Überschrift für die einzelnen Kategorien.
            header = QLabel()
            header.setAlignment(Qt.AlignHCenter)
            header.setText("<b>" + item[0] + "</b>")
            self.__layoutAttributes.addWidget(header, 0, actualColumn)

            # Einfügen der tatsächlichen Attribute
            i = 0
            for subitem in item[1]:
                attrib = self._character.traits["Attribute"][item[0]][subitem]
                #Debug.debug(attrib)
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = CharaTrait(attrib, self)
                traitWidget.setSpecialtiesHidden(True)
                traitWidget.setDescriptionHidden(True)

                # An welcher Position sitzt dieses Attribut in der Config.ATTRIBUTES-Liste?

                self.__layoutAttributes.addWidget(traitWidget, i + 1,
                                                  actualColumn)

                self.maxTraitChanged.connect(traitWidget.setMaximum)

                #if ( item == "Physical" ):
                #if ( attrib["name"] == "Strength" ):
                #self.__layoutAttributes.addWidget( self.__labelStr, j + 1, actualColumn + 1 )
                #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesStr( int ) ) )
                #} else if ( trait.name() == "Dexterity" ) {
                #layoutAttributes.addWidget( self.__labelDex, j + 1, actualColumn + 1 )
                #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesDex( int ) ) )
                #} else if ( trait.name() == "Stamina" ) {
                #layoutAttributes.addWidget( self.__labelSta, j + 1, actualColumn + 1 )
                #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesSta( int ) ) )
                #} else if ( trait.category() == cv_AbstractTrait::Social ) {
                #if ( self.__trait.name() == "Manipulation" ) {
                #layoutAttributes.addWidget( labelMan, j + 1, actualColumn + 1 )
                #connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesMan( int ) ) )

                i += 1

            # Bei Werwölfen erscheint hier Zusatztext. Und damit der Sparator richtig gesetzt wird, muß die aktuelle Spalte ein weitergezählt werden.
            actualColumn += 1

        self.__layout.addSpacing(Config.SPACE_VERTICAL_STD)

        self.__layoutBonus = QGridLayout()
        self.__layout.addLayout(self.__layoutBonus)

        self.__labelBonus = QLabel(self)
        self.__labelBonus.setText(self.tr("Bonus Attribute:"))

        self.__layoutButtonsBonus = QVBoxLayout()

        self.__buttonsBonus = QButtonGroup(self)

        self.__layoutBonus.addWidget(self.__labelBonus, 0, 0,
                                     Qt.AlignTop | Qt.AlignLeft)
        self.__layoutBonus.addLayout(self.__layoutButtonsBonus, 0, 1)
        #// 	layoutBonus.addItem(new QSpacerItem(0,0), 0, 2)
        self.__layoutBonus.addWidget(QWidget(self), 0, 2)
        self.__layoutBonus.setColumnStretch(2, 1)
	def __init__(self, template, character, parent=None):
		super(AttributeWidget, self).__init__(template, character, parent)

		self.__layout = QVBoxLayout()
		self.setLayout( self.__layout )

		self.__layoutAttributes = QGridLayout()
		self.__layout.addLayout( self.__layoutAttributes )

		self.__labelPower = QLabel( "<b>" + self.tr( "Power" ) + "</b>" )
		self.__labelPower.setAlignment( Qt.AlignRight )

		self.__labelFinesse = QLabel( "<b>" + self.tr( "Finesse" ) + "</b>" )
		self.__labelFinesse.setAlignment( Qt.AlignRight )

		self.__labelResistance = QLabel( "<b>" + self.tr( "Resistance" ) + "</b>" )
		self.__labelResistance.setAlignment( Qt.AlignRight )

		actualRow = 1
		actualColumn = 0

		self.__layoutAttributes.addWidget( self.__labelPower, actualRow, actualColumn )
		actualRow += 1
		self.__layoutAttributes.addWidget( self.__labelFinesse, actualRow, actualColumn )
		actualRow += 1
		self.__layoutAttributes.addWidget( self.__labelResistance, actualRow, actualColumn )

		self.__labelStr = QLabel( self )
		self.__labelDex = QLabel( self )
		self.__labelSta = QLabel( self )
		self.__labelMan = QLabel( self )

		#connect( self, SIGNAL( speciesChanged( bool ) ), labelStr, SLOT( setHidden( bool ) ) )
		#connect( self, SIGNAL( speciesChanged( bool ) ), labelDex, SLOT( setHidden( bool ) ) )
		#connect( self, SIGNAL( speciesChanged( bool ) ), labelSta, SLOT( setHidden( bool ) ) )
		#connect( self, SIGNAL( speciesChanged( bool ) ), labelMan, SLOT( setHidden( bool ) ) )

		for item in Config.ATTRIBUTES:
			#Debug.debug(self._character.traits)

			actualColumn += 1

			vLine = QFrame( self )
			vLine.setFrameStyle( QFrame.VLine)
			self.__layoutAttributes.addWidget( vLine, 1, actualColumn, len(item[1]), 1, Qt.AlignHCenter )

			self.__layoutAttributes.setColumnStretch( actualColumn, 1 )

			# Jetzt sind wir in der Spalte für die tatsächlchen Attribute
			actualColumn += 1

			# Aber zuerst kommt die Überschrift für die einzelnen Kategorien.
			header = QLabel()
			header.setAlignment( Qt.AlignHCenter )
			header.setText( "<b>" + item[0] + "</b>" )
			self.__layoutAttributes.addWidget( header, 0, actualColumn )

			# Einfügen der tatsächlichen Attribute
			i = 0
			for subitem in item[1]:
				attrib = self._character.traits["Attribute"][item[0]][subitem]
				#Debug.debug(attrib)
				# Anlegen des Widgets, das diese Eigenschaft repräsentiert.
				traitWidget = CharaTrait( attrib, self )
				traitWidget.setSpecialtiesHidden( True )
				traitWidget.setDescriptionHidden( True )

				# An welcher Position sitzt dieses Attribut in der Config.ATTRIBUTES-Liste?

				self.__layoutAttributes.addWidget( traitWidget, i + 1, actualColumn )

				self.maxTraitChanged.connect(traitWidget.setMaximum)

				#if ( item == "Physical" ):
					#if ( attrib["name"] == "Strength" ):
						#self.__layoutAttributes.addWidget( self.__labelStr, j + 1, actualColumn + 1 )
						#connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesStr( int ) ) )
					#} else if ( trait.name() == "Dexterity" ) {
						#layoutAttributes.addWidget( self.__labelDex, j + 1, actualColumn + 1 )
						#connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesDex( int ) ) )
					#} else if ( trait.name() == "Stamina" ) {
						#layoutAttributes.addWidget( self.__labelSta, j + 1, actualColumn + 1 )
						#connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesSta( int ) ) )
				#} else if ( trait.category() == cv_AbstractTrait::Social ) {
					#if ( self.__trait.name() == "Manipulation" ) {
						#layoutAttributes.addWidget( labelMan, j + 1, actualColumn + 1 )
						#connect( trait, SIGNAL( valueChanged( int ) ), self, SLOT( updateshapeValuesMan( int ) ) )

				i += 1

			# Bei Werwölfen erscheint hier Zusatztext. Und damit der Sparator richtig gesetzt wird, muß die aktuelle Spalte ein weitergezählt werden.
			actualColumn += 1

		self.__layout.addSpacing( Config.SPACE_VERTICAL_STD )

		self.__layoutBonus = QGridLayout()
		self.__layout.addLayout( self.__layoutBonus )

		self.__labelBonus = QLabel( self )
		self.__labelBonus.setText( self.tr( "Bonus Attribute:" ) )

		self.__layoutButtonsBonus = QVBoxLayout()

		self.__buttonsBonus = QButtonGroup( self )

		self.__layoutBonus.addWidget( self.__labelBonus, 0, 0, Qt.AlignTop | Qt.AlignLeft )
		self.__layoutBonus.addLayout( self.__layoutButtonsBonus, 0, 1 )
	#// 	layoutBonus.addItem(new QSpacerItem(0,0), 0, 2)
		self.__layoutBonus.addWidget( QWidget( self ), 0, 2 )
		self.__layoutBonus.setColumnStretch( 2, 1 )
    def __init__(self, template, character, parent=None):
        super(MeritWidget, self).__init__(template, character, parent)

        self.__layout = QVBoxLayout()
        self.setLayout(self.__layout)

        self.__toolBox = QToolBox()
        ## Die Auflistung der Merits soll auch unter Windows einen transparenten Hintergrund haben.
        self.__toolBox.setObjectName("transparentWidget")
        ## \todo Sollte nicht vom Betriebssystem, sondern vom verwendeten Style abhängen.
        if os.name == "nt":
            self.__toolBox.setStyleSheet(
                "QScrollArea{ background: transparent; } QWidget#transparentWidget { background: transparent; }"
            )
        self.__layout.addWidget(self.__toolBox)

        self.__typ = "Merit"
        categories = []
        categories.extend(Config.CATEGORIES_MERITS)
        categories.extend(self._storage.categories(self.__typ))
        # Duplikate werden entfernt. Dadurch wird die in der Config-Klasse vorgegebene Reihenfolge eingehalten und zusätzliche, dort nicht erwähnte Kategorien werden hinterher angehängt.
        categories = ListTools.uniqify_ordered(categories)

        # Diese Liste speichert den Index der ToolBox-Seite bei den unterschiedlichen Kategorien
        self.__categoryIndex = {}

        # Merits werden in einer Spalte heruntergeschrieben, aber mit vertikalem Platz dazwischen.
        for item in categories:
            # Für jede Kategorie wird ein eigener Abschnitt erzeugt.
            widgetMeritCategory = QWidget()
            ## Dank des Namens übernimmt dieses Widget den Stil des Eltern-Widgets.
            widgetMeritCategory.setObjectName("transparentWidget")

            layoutMeritCategory = QVBoxLayout()
            widgetMeritCategory.setLayout(layoutMeritCategory)

            self.__toolBox.addItem(widgetMeritCategory, item)
            self.__categoryIndex[item] = self.__toolBox.count() - 1
            #Debug.debug(self.__categoryIndex)

            __list = list(self._character.traits[self.__typ][item].items())
            __list.sort()
            for merit in __list:
                #Debug.debug(merit)
                # Anlegen des Widgets, das diese Eigenschaft repräsentiert.
                traitWidget = CharaTrait(merit[1], self)
                traitWidget.setSpecialtiesHidden(True)
                if not merit[1].custom:
                    traitWidget.setDescriptionHidden(True)

                # Bei Merits sind nur bestimmte Werte erlaubt.
                #Debug.debug(self._storage.traits[self.__typ][item][merit[0]])
                traitWidget.setPossibleValues(self._storage.traits[
                    self.__typ][item][merit[1].identifier]["values"])

                # Es werden nur Eigenschaften der richtigen Alters- und Zeit-Kategorie angezeigt.
                self.hideReasonChanged.connect(traitWidget.hideOrShowTrait)

                layoutMeritCategory.addWidget(traitWidget)

                merit[1].valueChanged.connect(self.countMerits)
                #self._character.speciesChanged.connect(traitWidget.hideOrShowTrait_species)

            # Stretch einfügen, damit die Eigenschaften besser angeordnet sind.
            layoutMeritCategory.addStretch()

        self.setMinimumWidth(Config.TRAIT_WIDTH_MIN)

        self._character.speciesChanged.connect(self.countMerits)