Commit 8440be68 authored by Aurélien's avatar Aurélien
Browse files

essai de faire le menu avec des widgets

parent d66b0022
Loading
Loading
Loading
Loading
+0 −5
Original line number Diff line number Diff line
@@ -21,11 +21,6 @@ class GameButton(QWidget):
        self.layout.addWidget(label, alignment=Qt.AlignCenter)
        self.setLayout(self.layout)

    def test(self):
        palette = QPalette()
        palette.setColor(self.backgroundRole(), QColor(215, 0, 255))
        self.setPalette(palette)

    def mousePressEvent(self, QMouseEvent):
        self.clicked.trigger()
+21 −1
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ from math import sqrt
from PyQt5.QtWidgets import *
from model.GameEnum import nbGames, GameEnum
from view.gameButton import GameButton
from view.menuWidget import BinaryTreeWidget, DyckWordWidget, PlanarTreeWidget, ArrowWidget


class MyWindow(QMainWindow):
@@ -77,7 +78,7 @@ class Menu:


    # function to put the central widget in the menu
    def displayGames(self):
    """def displayGames(self):
        self.removeCentralLayout()
        self.gamesWidget = QWidget()
        self.gamesLayout = QGridLayout()
@@ -104,6 +105,25 @@ class Menu:
            else:
                cptColumn += 1

        self.gamesWidget.setLayout(self.gamesLayout)
        self.centralLayout.addWidget(self.gamesWidget)"""

    def displayGames(self):
        self.removeCentralLayout()
        self.gamesWidget = QWidget()
        self.gamesLayout = QGridLayout()

        binary_tree_widget = BinaryTreeWidget()
        self.gamesLayout.addWidget(binary_tree_widget, 0, 2)
        arrowBinaryTreeToPlanarTree = ArrowWidget(10, 10, 10, GameEnum.BINARY_TREE_TO_PLANAR_TREE)
        self.gameButtons.append(arrowBinaryTreeToPlanarTree)
        self.gamesLayout.addWidget(arrowBinaryTreeToPlanarTree, 1, 1)

        planar_tree_widget = PlanarTreeWidget()
        self.gamesLayout.addWidget(planar_tree_widget, 2, 0)
        dyck_word_widget = DyckWordWidget()
        self.gamesLayout.addWidget(dyck_word_widget, 2, 4)

        self.gamesWidget.setLayout(self.gamesLayout)
        self.centralLayout.addWidget(self.gamesWidget)

view/menuWidget.py

0 → 100644
+135 −0
Original line number Diff line number Diff line
from PyQt5.QtGui import QFont
from PyQt5.QtWidgets import *

from model.GameEnum import GameEnum
from model.node import Leaf, BinaryNode, binaryTreeToPlanarTree
from model.tree import Tree
from view.treeView import TreeView


def get_model_tree():
    return Tree(
        BinaryNode(
            BinaryNode(
                Leaf(),
                Leaf()
            ),
            BinaryNode(
                Leaf(),
                BinaryNode(
                    Leaf(),
                    Leaf()
                )
            )
        ))

class ArrowWidget(QWidget):
    def __init__(self, xSize: float, ySize: float, angle: float, game: GameEnum):
        super(QWidget, self).__init__()
        self.game = game
        self.clicked = QAction()

        self.layout = QHBoxLayout()

        self.createArrowView(xSize, ySize, angle)

        self.layout.addWidget(self.arrowView)
        self.setLayout(self.layout)

    def createArrowView(self, xSize: float, ySize: float, angle: float):
        self.treeScene = QGraphicsScene()
        self.arrowView = ArrowView(self.treeScene, xSize=xSize, ySize=ySize, angle=angle)

    def mousePressEvent(self, QMouseEvent):
        self.clicked.trigger()


class ArrowView(QGraphicsView):
    """
    class which contains a level of a game and which is used to draw the BinaryTree of the level
    """

    def __init__(self, *args, xSize: float, ySize: float, angle: float, **kwargs):
        super(QGraphicsView, self).__init__(*args, **kwargs)
        self.xSize = xSize
        self.ySize = ySize
        self.angle = angle

        self.arrowItemsGroup = QGraphicsItemGroup()
        self.drawArrow()
        self.scene().addItem(self.arrowItemsGroup)

    def drawArrow(self):
        rectangle = QGraphicsRectItem(0, 0, 20, 100)
        self.arrowItemsGroup.addToGroup(rectangle)

    def resizeEvent(self, e):
        e.accept()
        self.drawArrow()


class DyckWordWidget(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()

        self.layout = QHBoxLayout()

        self.createDyckWordGroupBox()

        self.layout.addWidget(self.dyckWordGroupBox)
        self.setLayout(self.layout)


    def createDyckWordGroupBox(self):
        self.dyckWordGroupBox = QGroupBox()
        self.globalDyckWordLayout = QVBoxLayout()
        self.dyckWordLayout = QHBoxLayout()
        self.globalDyckWordLayout.addLayout(self.dyckWordLayout, 1)
        self.dyckWordGroupBox.setLayout(self.globalDyckWordLayout)
        word = get_model_tree().dyckWord
        newWord = ""
        for i in range(len(word)):
            newWord += word[i]
            if i != len(word) - 1:
                newWord += " "
        label = QLabel(newWord)
        label.setFont(QFont("Arial", 25))
        self.dyckWordLayout.addStretch(1)
        self.dyckWordLayout.addWidget(label)
        self.dyckWordLayout.addStretch(1)


class BinaryTreeWidget(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()

        self.layout = QHBoxLayout()

        self.createTreeView()

        self.layout.addWidget(self.treeView)
        self.setLayout(self.layout)

    def createTreeView(self):
        tree = get_model_tree()
        self.treeScene = QGraphicsScene()
        self.treeView = TreeView(self.treeScene, tree=tree)
        self.treeView.drawTree()


class PlanarTreeWidget(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()

        self.layout = QHBoxLayout()

        self.createTreeView()

        self.layout.addWidget(self.treeView)
        self.setLayout(self.layout)

    def createTreeView(self):
        tree = Tree(binaryTreeToPlanarTree(get_model_tree().root))
        self.treeScene = QGraphicsScene()
        self.treeView = TreeView(self.treeScene, tree=tree)
        self.treeView.drawTree()
+1 −3
Original line number Diff line number Diff line
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QWidget, QAction, QHBoxLayout, QMessageBox, QPushButton, QGroupBox, QVBoxLayout, QLabel, \
    QGraphicsScene
from PyQt5.QtWidgets import *

from view.levelGui import LevelGui
from view.treeView import TreeView
+6 −3
Original line number Diff line number Diff line
@@ -13,17 +13,18 @@ class TreeView(QGraphicsView):
    class which contains a level of a game and which is used to draw the BinaryTree of the level
    """

    def __init__(self, *args, controller=None, model=False, root=False, **kwargs):
    def __init__(self, *args, controller=None, model=False, root=False, tree=None, **kwargs):
        super(QGraphicsView, self).__init__(*args, **kwargs)
        assert(controller is not None)
        self.controller = controller
        self.tree = tree
        self.treeItemsGroup = QGraphicsItemGroup()
        self.scene().addItem(self.treeItemsGroup)
        self.indexChildButton = 0
        self.buttons = []
        self.root = root
        self.model = model
        if model:
        if self.controller is not None:
            if self.model:
                self.tree = self.controller.level.answer
            else:
                self.tree = self.controller.level.tree
@@ -37,10 +38,12 @@ class TreeView(QGraphicsView):
        this method is used to calculate the parameters of the function which draws the tree (dimensions of the tree)
        and to call it
        """
        if self.controller is not None:
            if self.model:
                self.tree = self.controller.level.answer
            else:
                self.tree = self.controller.level.tree

        if self.root:
            if isinstance(self.tree.root, BinaryNode) or isinstance(self.tree.root, EmptyNode):
                tree = Tree(BinaryNode(self.tree.root, Leaf()))