diff --git a/GUI/main_window.py b/GUI/main_window.py new file mode 100644 index 0000000000000000000000000000000000000000..53dacce61b5acbfe9de9607a2499c57e0a386eae --- /dev/null +++ b/GUI/main_window.py @@ -0,0 +1,200 @@ +"""@package docstring +B-ASIC GUI Module. +This python file is an example of how a GUI can be implemented +using buttons and textboxes. +""" + +import sys + +from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow, QLabel, QAction,\ +QStatusBar, QMenuBar, QLineEdit, QPushButton +from PyQt5.QtCore import Qt +from PyQt5.QtGui import QIcon, QFont, QPainter, QPen + + +class DragButton(QPushButton): + """How to create a dragbutton""" + def mousePressEvent(self, event): + self._mouse_press_pos = None + self._mouse_move_pos = None + if event.button() == Qt.LeftButton: + self._mouse_press_pos = event.globalPos() + self._mouse_move_pos = event.globalPos() + + super(DragButton, self).mousePressEvent(event) + + def mouseMoveEvent(self, event): + if event.buttons() == Qt.LeftButton: + cur_pos = self.mapToGlobal(self.pos()) + global_pos = event.globalPos() + diff = global_pos - self._mouse_move_pos + new_pos = self.mapFromGlobal(cur_pos + diff) + self.move(new_pos) + + self._mouse_move_pos = global_pos + + super(DragButton, self).mouseMoveEvent(event) + + def mouseReleaseEvent(self, event): + if self._mouse_press_pos is not None: + moved = event.globalPos() - self._mouse_press_pos + if moved.manhattanLength() > 3: + event.ignore() + return + + super(DragButton, self).mouseReleaseEvent(event) + +class SubWindow(QWidget): + """Creates a sub window """ + def create_window(self, window_width, window_height): + """Creates a window + """ + parent = None + super(SubWindow, self).__init__(parent) + self.setWindowFlags(Qt.WindowStaysOnTopHint) + self.resize(window_width, window_height) + +class MainWindow(QMainWindow): + """Main window for the program""" + def __init__(self, *args, **kwargs): + super(MainWindow, self).__init__(*args, **kwargs) + + self.setWindowTitle(" ") + self.setWindowIcon(QIcon('small_logo.png')) + + # Menu buttons + test_button = QAction("Test", self) + + exit_button = QAction("Exit", self) + exit_button.setShortcut("Ctrl+Q") + exit_button.triggered.connect(self.exit_app) + + edit_button = QAction("Edit", self) + edit_button.setStatusTip("Open edit menu") + edit_button.triggered.connect(self.on_edit_button_click) + + view_button = QAction("View", self) + view_button.setStatusTip("Open view menu") + view_button.triggered.connect(self.on_view_button_click) + + menu_bar = QMenuBar() + menu_bar.setStyleSheet("background-color:rgb(222, 222, 222)") + self.setMenuBar(menu_bar) + + file_menu = menu_bar.addMenu("&File") + file_menu.addAction(exit_button) + file_menu.addSeparator() + file_menu.addAction(test_button) + + edit_menu = menu_bar.addMenu("&Edit") + edit_menu.addAction(edit_button) + + edit_menu.addSeparator() + + view_menu = menu_bar.addMenu("&View") + view_menu.addAction(view_button) + + self.setStatusBar(QStatusBar(self)) + + def on_file_button_click(self): + print("File") + + def on_edit_button_click(self): + print("Edit") + + def on_view_button_click(self): + print("View") + + def exit_app(self, checked): + QApplication.quit() + + def clicked(self): + print("Drag button clicked") + + def add_drag_buttons(self): + """Adds draggable buttons""" + addition_button = DragButton("Addition", self) + addition_button.move(10, 130) + addition_button.setFixedSize(70, 20) + addition_button.clicked.connect(self.create_sub_window) + + addition_button2 = DragButton("Addition", self) + addition_button2.move(10, 130) + addition_button2.setFixedSize(70, 20) + addition_button2.clicked.connect(self.create_sub_window) + + subtraction_button = DragButton("Subtraction", self) + subtraction_button.move(10, 170) + subtraction_button.setFixedSize(70, 20) + subtraction_button.clicked.connect(self.create_sub_window) + + subtraction_button2 = DragButton("Subtraction", self) + subtraction_button2.move(10, 170) + subtraction_button2.setFixedSize(70, 20) + subtraction_button2.clicked.connect(self.create_sub_window) + + multiplication_button = DragButton("Multiplication", self) + multiplication_button.move(10, 210) + multiplication_button.setFixedSize(70, 20) + multiplication_button.clicked.connect(self.create_sub_window) + + multiplication_button2 = DragButton("Multiplication", self) + multiplication_button2.move(10, 210) + multiplication_button2.setFixedSize(70, 20) + multiplication_button2.clicked.connect(self.create_sub_window) + + def paintEvent(self, e): + # Temporary black box for operations + painter = QPainter(self) + painter.setPen(QPen(Qt.black, 5, Qt.SolidLine)) + painter.drawRect(0, 110, 100, 400) + + # Temporary arrow resembling a signal + painter.setRenderHint(QPainter.Antialiasing) + painter.setPen(Qt.black) + painter.setBrush(Qt.white) + painter.drawLine(300, 200, 400, 200) + painter.drawLine(400, 200, 395, 195) + painter.drawLine(400, 200, 395, 205) + + def create_sub_window(self): + """ Example of how to create a sub window + """ + self.sub_window = SubWindow() + self.sub_window.create_window(400, 300) + self.sub_window.setWindowTitle("Properties") + + self.sub_window.properties_label = QLabel(self.sub_window) + self.sub_window.properties_label.setText('Properties') + self.sub_window.properties_label.setFixedWidth(400) + self.sub_window.properties_label.setFont(QFont('SansSerif', 14, QFont.Bold)) + self.sub_window.properties_label.setAlignment(Qt.AlignCenter) + + self.sub_window.name_label = QLabel(self.sub_window) + self.sub_window.name_label.setText('Name:') + self.sub_window.name_label.move(20, 40) + + self.sub_window.name_line = QLineEdit(self.sub_window) + self.sub_window.name_line.setPlaceholderText("Write a name here") + self.sub_window.name_line.move(70, 40) + self.sub_window.name_line.resize(100, 20) + + self.sub_window.id_label = QLabel(self.sub_window) + self.sub_window.id_label.setText('Id:') + self.sub_window.id_label.move(20, 70) + + self.sub_window.id_line = QLineEdit(self.sub_window) + self.sub_window.id_line.setPlaceholderText("Write an id here") + self.sub_window.id_line.move(70, 70) + self.sub_window.id_line.resize(100, 20) + + self.sub_window.show() + + +if __name__ == "__main__": + app = QApplication(sys.argv) + window = MainWindow() + window.add_drag_buttons() + window.resize(960, 720) + window.show() + app.exec_() diff --git a/small_logo.png b/small_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..689a38192b9fc4c6ed490e1e0001fd5dd264c968 Binary files /dev/null and b/small_logo.png differ