示例#1
0
    def add_tree_no_header(self, parent):
        tw = QTreeWidget()
        parent.addWidget(tw)
        tw.setHeaderHidden(True)
        tw.setAlternatingRowColors(True)

        i1 = QTreeWidgetItem(tw, ['Mammal'])
        i2 = QTreeWidgetItem(i1, ['Rodent'])
        i3 = QTreeWidgetItem(i2, ['Rat'])
        i3 = QTreeWidgetItem(i2, ['Beaver'])
        i2 = QTreeWidgetItem(i1, ['Primate'])
        i3 = QTreeWidgetItem(i2, ['Baboon'])
        i3 = QTreeWidgetItem(i2, ['Human'])
        i1 = QTreeWidgetItem(tw, ['Reptile'])
        i2 = QTreeWidgetItem(i1, ['Snake'])
        i3 = QTreeWidgetItem(i1, ['Crocodile'])

        self.add_expand_collapse_buttons(parent, tw)
示例#2
0
    def add_tree_with_header(self, parent):
        tw = QTreeWidget()
        parent.addWidget(tw)
        tw.setHeaderLabels(['Type', 'Legs', 'Has Hair/Fur'])
        tw.setSortingEnabled(True)
        tw.setAlternatingRowColors(True)
        i1 = QTreeWidgetItem(tw, ['Mammal'])
        i2 = QTreeWidgetItem(i1, ['Rodent'])
        i3 = QTreeWidgetItem(i2, ['Rat', '4', 'True'])
        i3 = QTreeWidgetItem(i2, ['Beaver', '2', 'True'])
        i2 = QTreeWidgetItem(i1, ['Primate'])
        i3 = QTreeWidgetItem(i2, ['Baboon', '2', 'True'])
        i3 = QTreeWidgetItem(i2, ['Human', '2', 'True'])
        i1 = QTreeWidgetItem(tw, ['Reptile'])
        i2 = QTreeWidgetItem(i1, ['Snake', '0', 'False'])
        i3 = QTreeWidgetItem(i1, ['Crocodile', '4', 'False'])

        self.add_expand_collapse_buttons(parent, tw)
示例#3
0
    def _initUI(self):
        def _init_tool_buttons():

            # First logic buttons
            logic_buttons_layout = QHBoxLayout()

            logic_buttons = [('NO', QPushButton('NO')),
                             ('AND', QPushButton('AND')),
                             ('OR', QPushButton('OR')),
                             ('implies', QPushButton('→')),
                             ('equivalence', QPushButton('↔')),
                             ('forall', QPushButton('∀')),
                             ('exists', QPushButton('∃'))]

            for name, button in logic_buttons:
                if name in self.tool_buttons:
                    logic_buttons_layout.addWidget(button)

            # Then proof buttons
            proof_buttons_layout = QHBoxLayout()
            proof_buttons = [\
                    ('p_contraposition', QPushButton('Proof by contraposition')),
                    ('p_absurd', QPushButton('Proof by contradicton')),
                    ('p_cases', QPushButton('Cases disjunction')),
                    ('p_induction', QPushButton('Proof by induction'))]

            for name, button in proof_buttons:
                if name in self.tool_buttons:
                    proof_buttons_layout.addWidget(button)

            # Put it all together
            buttons_layout = QVBoxLayout()
            buttons_layout.addLayout(logic_buttons_layout)
            buttons_layout.addLayout(proof_buttons_layout)

            return buttons_layout

        # Create widgets
        objects = PropobjList()
        objects.addItem('X : ensemble')
        objects.addItem('Y : ensemble')
        objects.addItem('f : X → Y')
        objects.addItem('x ∈ X')
        objects.addItem('A : partie de X')
        icon_item = QListWidgetItem('B partie de X')
        icon_item.setIcon(QIcon('icon_blue.png'))
        objects.addItem(icon_item)

        properties = PropobjList()
        properties.addItem('f est une fonction de remplissage')
        properties.addItem("transitivité de l'union")

        statements = QTreeWidget()
        statements.setAlternatingRowColors(True)
        statements.setHeaderLabels(['Énoncé', 'Identifiant'])
        anneaux_ideaux = StatementNode(statements, 'Anneaux et idéaux')
        Statement(anneaux_ideaux, ['Définition anneau', 'Définition 1.1'])
        Statement(anneaux_ideaux, ['Définition idéal', 'Définition 1.7'])
        Statement(anneaux_ideaux, ["Existence d'un idéal maximal", 'Théorème'])
        noetherianite = StatementNode(statements, 'Noetherianité')
        Statement(noetherianite, ['Transfert de Noethérianité', ''])
        Statement(noetherianite,
                  ['Principal implique noethérien', 'Proposition 2.3'])
        statements.resizeColumnToContents(0)

        goal = Goal(GOAL)

        # Create layouts
        goal_layout = QHBoxLayout()
        logic_buttons = _init_tool_buttons()  # already contains buttons
        main_layout = QVBoxLayout()
        workspace_layout = QHBoxLayout()
        propobj_layout = QVBoxLayout()
        tools_layout = QVBoxLayout()

        # Create QGroupBox to have titles
        propobj_gb = QGroupBox('Properties and objects')
        tools_gb = QGroupBox('Tools (affect goal, prop. and obj.)')

        # Put widgets in layouts and group boxes
        goal_layout.addStretch()
        goal_layout.addWidget(goal)
        goal_layout.addStretch()
        # Add space below goal
        goal_layout.setContentsMargins(0, 10, 0, 30)  #LTRB
        propobj_layout.addWidget(objects)
        propobj_layout.addWidget(properties)
        tools_layout.addLayout(logic_buttons)
        tools_layout.addWidget(statements)
        propobj_gb.setLayout(propobj_layout)
        tools_gb.setLayout(tools_layout)
        workspace_layout.addWidget(propobj_gb)
        workspace_layout.addWidget(tools_gb)

        # Don't forget me
        main_layout.addLayout(goal_layout)
        main_layout.addLayout(workspace_layout)
        self.setWindowTitle("L'union des images réciproque est l'image "\
                "réciproque de l'union — d∃∀duction")
        self.setLayout(main_layout)
        self.show()