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)
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)
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()