def initUI(self):
        grid = QGridLayout()
        grid.setHorizontalSpacing(2)
        grid.setVerticalSpacing(2)
        # Reference
        # https://stackoverflow.com/questions/16673074/how-can-i-fully-disable-resizing-a-window-including-the-resize-icon-when-the-mou
        grid.setSizeConstraint(QLayout.SetFixedSize)
        self.setLayout(grid)

        # This is register
        self.ent = Register()

        # This is display value of register
        self.lcd = QLCDNumber(self)
        self.lcd.setDigitCount(self.max_chars + 2)
        self.lcd.setSmallDecimalPoint(True)
        self.lcd.display(self.ent.get_text())
        self.lcd.setStyleSheet("QLCDNumber {color:darkgreen;}")
        self.lcd.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        grid.addWidget(self.lcd, 0, 0, 1, 4)
        grid.setRowMinimumHeight(0, 40)

        for key in self.keys_info:
            but = QPushButton(key['label'])
            method_name = key['method']
            method = getattr(self, method_name)
            but.clicked.connect(method)
            but.setStyleSheet(
                "QPushButton {font-size:12pt; padding:5px 30px; color:#666;}")
            but.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
            grid.addWidget(but, key['y'], key['x'], key['h'], key['w'])
Beispiel #2
0
    def __init__(self, parent=None):
        super().__init__(parent)

        settings = QSettings()

        layout = QGridLayout(self)
        layout.setSizeConstraint(QLayout.SetFixedSize)

        layout.addWidget(QLabel("CyKit address:"), 0, 0)
        self.cykit_address_field = QLineEdit()
        self.cykit_address_field.setText(settings.value('CyKitAddress'))
        self.cykit_address_field.setPlaceholderText(app.DEFAULT_CYKIT_ADDRESS)
        layout.addWidget(self.cykit_address_field, 0, 1, 1, 2)

        layout.addWidget(QLabel("CyKit port:"), 1, 0)
        self.cykit_port_field = QLineEdit()
        self.cykit_port_field.setText(settings.value('CyKitPort'))
        self.cykit_port_field.setPlaceholderText(str(app.DEFAULT_CYKIT_PORT))
        layout.addWidget(self.cykit_port_field, 1, 1, 1, 2)

        cancel_button = QPushButton("Cancel")
        cancel_button.clicked.connect(self.reject)
        layout.addWidget(cancel_button, 2, 1)

        ok_button = QPushButton("OK")
        ok_button.clicked.connect(self.accept)
        layout.addWidget(ok_button, 2, 2)

        self.setLayout(layout)
        self.setWindowTitle("Preferences")
Beispiel #3
0
class Funcoes:
    def limpa_formulario(self, frm):
        for i in reversed(range(len(frm.children()))):
            frm.children()[i].deleteLater()
            print(frm.layout())

    def set_grid_layout_conteudo(self, frame):
        self.grl_fra_conteudo = QGridLayout(frame)
        self.grl_fra_conteudo.setSpacing(0)
        self.grl_fra_conteudo.setObjectName(u"grl_fra_conteudo")
        self.grl_fra_conteudo.setSizeConstraint(QLayout.SetMinimumSize)
        self.grl_fra_conteudo.setContentsMargins(0, 0, 0, 0)
Beispiel #4
0
    def __init__(self):
        super(Dialog, self).__init__()

        self.rotableWidgets = []

        self.createRotableGroupBox()
        self.createOptionsGroupBox()
        self.createButtonBox()

        mainLayout = QGridLayout()
        mainLayout.addWidget(self.rotableGroupBox, 0, 0)
        mainLayout.addWidget(self.optionsGroupBox, 1, 0)
        mainLayout.addWidget(self.buttonBox, 2, 0)
        mainLayout.setSizeConstraint(QLayout.SetMinimumSize)

        self.mainLayout = mainLayout
        self.setLayout(self.mainLayout)

        self.setWindowTitle("Dynamic Layouts")
    def __init__(self):
        super(Dialog, self).__init__()

        self.rotableWidgets = []

        self.createRotableGroupBox()
        self.createOptionsGroupBox()
        self.createButtonBox()

        mainLayout = QGridLayout()
        mainLayout.addWidget(self.rotableGroupBox, 0, 0)
        mainLayout.addWidget(self.optionsGroupBox, 1, 0)
        mainLayout.addWidget(self.buttonBox, 2, 0)
        mainLayout.setSizeConstraint(QLayout.SetMinimumSize)

        self.mainLayout = mainLayout
        self.setLayout(self.mainLayout)

        self.setWindowTitle("Dynamic Layouts")
Beispiel #6
0
    def __init__(self):
        super(Window, self).__init__()

        self.createCalendarBox()
        self.setup_database_dialog()
        self.database_utilities()
        self.ready_plots()

        layout = QGridLayout()
        layout.addWidget(self.db_dialog_groupbox, 0, 0)
        layout.addWidget(self.previewGroupBox, 0, 1)
        layout.addWidget(self.db_util_groupbox, 1, 0)
        layout.addWidget(self.ready_plt_groupbox, 1, 1)

        layout.setSizeConstraint(QLayout.SetFixedSize)
        self.setLayout(layout)
        self.previewLayout.setRowMinimumHeight(0,
                                               self.calendar.sizeHint().height())
        self.previewLayout.setColumnMinimumWidth(0,
                                                 self.calendar.sizeHint().width())

        self.setWindowTitle("Data Visualization Application")
Beispiel #7
0
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        w = QWidget()

        hb = QHBoxLayout()
        hb.setSizeConstraint(QLayout.SetFixedSize)

        self._timer = QTimer()
        self._timer.timeout.connect(self.update_timer)
        self._timer.start(1000)  # 1 second timer

        # tag::status[]
        self.mines = QLabel()
        self.mines.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        self.clock = QLabel()
        self.clock.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)

        f = self.mines.font()
        f.setPointSize(24)
        f.setWeight(75)
        self.mines.setFont(f)
        self.clock.setFont(f)

        self.clock.setText("000")

        self.button = QPushButton()
        self.button.setFixedSize(QSize(32, 32))
        self.button.setIconSize(QSize(32, 32))
        self.button.setIcon(QIcon("./icons/smiley.png"))
        self.button.setFlat(True)

        self.button.pressed.connect(self.button_pressed)

        self.statusBar()

        l = QLabel()
        l.setPixmap(QPixmap.fromImage(IMG_BOMB))
        l.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        hb.addWidget(l)

        hb.addWidget(self.mines)
        hb.addWidget(self.button)
        hb.addWidget(self.clock)

        l = QLabel()
        l.setPixmap(QPixmap.fromImage(IMG_CLOCK))
        l.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        hb.addWidget(l)

        vb = QVBoxLayout()
        vb.setSizeConstraint(QLayout.SetFixedSize)
        vb.addLayout(hb)
        # end::status[]

        # tag::grid[]
        self.grid = QGridLayout()
        self.grid.setSpacing(5)
        self.grid.setSizeConstraint(QLayout.SetFixedSize)
        # end::grid[]

        vb.addLayout(self.grid)
        w.setLayout(vb)

        self.setCentralWidget(w)

        self.menuBar().setNativeMenuBar(False)

        # tag::menuGame[]
        game_menu = self.menuBar().addMenu("&Game")

        new_game_action = QAction("New game", self)
        new_game_action.setStatusTip(
            "Start a new game (your current game will be lost)"
        )
        new_game_action.triggered.connect(self.reset_map)
        game_menu.addAction(new_game_action)

        levels = game_menu.addMenu("Levels")
        for n, level in enumerate(LEVELS):
            level_action = QAction(level[0], self)
            level_action.setStatusTip("{1}x{1} grid, with {2} mines".format(*level))
            level_action.triggered.connect(lambda _, n=n: self.set_level(n))
            levels.addAction(level_action)
        # end::menuGame[]

        # Start on easy
        self.set_level(0)
        self.show()

    # tag::levelsInit[]
    def set_level(self, level):
        self.level_name, self.b_size, self.n_mines = LEVELS[level]

        self.setWindowTitle("Moonsweeper - %s" % (self.level_name))
        self.mines.setText("%03d" % self.n_mines)

        self.clear_map()
        self.init_map()
        self.reset_map()

    # end::levelsInit[]

    # tag::clearMap[]
    def clear_map(self):
        # Remove all positions from the map, up to maximum size.
        for x in range(0, LEVELS[-1][1]):  # <1>
            for y in range(0, LEVELS[-1][1]):
                c = self.grid.itemAtPosition(y, x)
                if c:  # <2>
                    self.grid.removeItem(c)
                    c.widget().setParent(None)

    # end::clearMap[]

    # tag::initMap[]
    def init_map(self):
        # Add positions to the map
        for x in range(0, self.b_size):
            for y in range(0, self.b_size):
                w = Pos(x, y)
                self.grid.addWidget(w, y, x)
                # Connect signal to handle expansion.
                w.clicked.connect(self.trigger_start)
                w.revealed.connect(self.on_reveal)
                w.expandable.connect(self.expand_reveal)

        # Place resize on the event queue, giving control back to Qt before.
        QTimer.singleShot(0, lambda: self.resize(1, 1))  # <1>

    # end::initMap[]

    # tag::resetMap[]
    def reset_map(self):
        self._reset_position_data()
        self._reset_add_mines()
        self._reset_calculate_adjacency()
        self._reset_add_starting_marker()
        self.update_timer()

    # end::resetMap[]

    # tag::resetMap1[]
    def _reset_position_data(self):
        # Clear all mine positions
        for x in range(0, self.b_size):
            for y in range(0, self.b_size):
                w = self.grid.itemAtPosition(y, x).widget()
                w.reset()

    # end::resetMap1[]

    # tag::resetMap2[]
    def _reset_add_mines(self):
        # Add mine positions
        positions = []
        while len(positions) < self.n_mines:
            x, y = (
                random.randint(0, self.b_size - 1),
                random.randint(0, self.b_size - 1),
            )
            if (x, y) not in positions:
                w = self.grid.itemAtPosition(y, x).widget()
                w.is_mine = True
                positions.append((x, y))

        # Calculate end-game condition
        self.end_game_n = (self.b_size * self.b_size) - (self.n_mines + 1)
        return positions

    # end::resetMap2[]

    # tag::resetMap3[]
    def _reset_calculate_adjacency(self):
        def get_adjacency_n(x, y):
            positions = self.get_surrounding(x, y)
            return sum(1 for w in positions if w.is_mine)

        # Add adjacencies to the positions
        for x in range(0, self.b_size):
            for y in range(0, self.b_size):
                w = self.grid.itemAtPosition(y, x).widget()
                w.adjacent_n = get_adjacency_n(x, y)

    # end::resetMap3[]

    # tag::resetMap4[]
    def _reset_add_starting_marker(self):
        # Place starting marker.

        # Set initial status (needed for .click to function)
        self.update_status(STATUS_READY)

        while True:
            x, y = (
                random.randint(0, self.b_size - 1),
                random.randint(0, self.b_size - 1),
            )
            w = self.grid.itemAtPosition(y, x).widget()
            # We don't want to start on a mine.
            if not w.is_mine:
                w.is_start = True
                w.is_revealed = True
                w.update()

                # Reveal all positions around this, if they are not mines either.
                for w in self.get_surrounding(x, y):
                    if not w.is_mine:
                        w.click()
                break

        # Reset status to ready following initial clicks.
        self.update_status(STATUS_READY)

    # end::resetMap4[]

    # tag::surrounding[]
    def get_surrounding(self, x, y):
        positions = []

        for xi in range(max(0, x - 1), min(x + 2, self.b_size)):
            for yi in range(max(0, y - 1), min(y + 2, self.b_size)):
                if not (xi == x and yi == y):
                    positions.append(self.grid.itemAtPosition(yi, xi).widget())

        return positions

    # end::surrounding[]

    # tag::statusButton[]
    def button_pressed(self):
        if self.status == STATUS_PLAYING:
            self.game_over()

        elif self.status == STATUS_FAILED or self.status == STATUS_SUCCESS:
            self.reset_map()

    # end::statusButton[]

    def reveal_map(self):
        for x in range(0, self.b_size):
            for y in range(0, self.b_size):
                w = self.grid.itemAtPosition(y, x).widget()
                w.reveal(False)

    # tag::expandReveal[]
    def expand_reveal(self, x, y):
        """
        Iterate outwards from the initial point, adding new locations to the
        queue. This allows us to expand all in a single go, rather than
        relying on multiple callbacks.
        """
        to_expand = [(x, y)]
        to_reveal = []
        any_added = True

        while any_added:
            any_added = False
            to_expand, l = [], to_expand

            for x, y in l:
                positions = self.get_surrounding(x, y)
                for w in positions:
                    if not w.is_mine and w not in to_reveal:
                        to_reveal.append(w)
                        if w.adjacent_n == 0:
                            to_expand.append((w.x, w.y))
                            any_added = True

        # Iterate an reveal all the positions we have found.
        for w in to_reveal:
            w.reveal()

    # end::expandReveal[]

    def trigger_start(self, *args):
        if self.status == STATUS_READY:
            # First click.
            self.update_status(STATUS_PLAYING)
            # Start timer.
            self._timer_start_nsecs = int(time.time())

    # tag::updateStatus[]
    def update_status(self, status):
        self.status = status
        self.button.setIcon(QIcon(STATUS_ICONS[self.status]))

        if status == STATUS_READY:
            self.statusBar().showMessage("Ready")

    # end::updateStatus[]

    def update_timer(self):
        if self.status == STATUS_PLAYING:
            n_secs = int(time.time()) - self._timer_start_nsecs
            self.clock.setText("%03d" % n_secs)

        elif self.status == STATUS_READY:
            self.clock.setText("%03d" % 0)

    # tag::endGame[]
    def on_reveal(self, w):
        if w.is_mine:
            self.game_over()

        else:
            self.end_game_n -= 1  # decrement remaining empty spaces

            if self.end_game_n == 0:
                self.game_won()

    def game_over(self):
        self.reveal_map()
        self.update_status(STATUS_FAILED)

    def game_won(self):
        self.reveal_map()
        self.update_status(STATUS_SUCCESS)
class PropertiesWidget(QWidget):
    def __init__(self, parent, obj):
        super(PropertiesWidget, self).__init__()
        self.obj = obj
        self.parent = parent
        self.grid = QGridLayout()
        self.grid.setSizeConstraint(self.grid.SetMinAndMaxSize)

        title = Label("Propriété : " + self.obj.type_, 16)
        title.setMaximumHeight(80)
        title.setMinimumHeight(80)
        title.setAlignment(Qt.AlignHCenter)
        self.grid.addWidget(title, 0, 0, 1, 2)
        self.grid.setRowStretch(0, 1)

        nb = 1
        for p in get_properties(self.obj.type_):
            label = Label(p[0], 12)
            label.setMaximumHeight(50)
            label.setMinimumHeight(50)
            self.grid.addWidget(label, nb, 0)

            if p[1] == "str":
                widget = QLineEdit()
                if p[0] == "Nom":
                    widget.setText(self.obj.name)
                else:
                    widget.setText(self.obj.properties.get(p[0], ""))
                widget.textChanged.connect(
                    lambda text="", prop=p[0]: self.set_text_for(text, prop))
            elif p[1] == "bool":
                widget = QCheckBox()
                if self.obj.properties.get(p[0], False):
                    widget.setChecked(True)
                widget.stateChanged.connect(
                    lambda state=0, prop=p[0]: self.set_bool_for(state, prop))
            elif p[1] == "int":
                widget = QSpinBox()
                widget.setMaximum(3000)
                widget.setMinimum(-3000)
                widget.setValue(self.obj.properties.get(p[0], 0))
                widget.valueChanged.connect(
                    lambda value=0, prop=p[0]: self.set_int_for(value, prop))
            elif "|" in p[1] and p[1].split("|")[0] == "list":
                widget = QComboBox()
                for i in p[1].split("|")[1].split(", "):
                    widget.addItem(i)
                widget.setCurrentText(
                    self.obj.properties.get(p[0],
                                            p[1].split("|")[1].split(", ")[0]))
                widget.currentTextChanged.connect(
                    lambda value="", prop=p[0]: self.set_text_for(value, prop))
            elif p[1] == "color":
                widget = QPushButton("Sélectionner")
                widget.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_color_for(prop))
            elif p[1] == "colorNone":
                widget = QWidget()
                layout = QGridLayout()
                select = QPushButton("Sélectionner")
                select.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_color_for(prop))
                delete = QPushButton("Supprimer")
                delete.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_none_for(prop))
                layout.addWidget(select, 0, 0)
                layout.addWidget(delete, 0, 1)
                widget.setLayout(layout)
            elif p[1] == "file":
                widget = QPushButton("Sélectionner")
                widget.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_file_for(prop))
            elif p[1] == "fileNone":
                widget = QWidget()
                layout = QGridLayout()
                select = QPushButton("Sélectionner")
                select.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_file_for(prop))
                delete = QPushButton("Supprimer")
                delete.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_none_for(prop))
                layout.addWidget(select, 0, 0)
                layout.addWidget(delete, 0, 1)
                widget.setLayout(layout)
            elif p[1] == "files":
                widget = QPushButton("Sélectionner")
                widget.clicked.connect(
                    lambda checked=False, prop=p[0]: self.set_files_for(prop))
            else:
                raise TypeError("Unknown type for properties : " + p[1])
            self.grid.addWidget(widget, nb, 1)
            self.grid.setRowStretch(nb, 1)

            nb += 1

        scripting = QPushButton("Modifier Script")
        scripting.clicked.connect(self.edit_script)
        self.grid.addWidget(scripting, nb, 0, 1, 2)

        end_spacer = QSpacerItem(20, 20, QSizePolicy.Preferred,
                                 QSizePolicy.Expanding)
        self.grid.addItem(end_spacer, nb + 1, 0)

        for i in range(0, 2):
            self.grid.setColumnStretch(i, 1)

        self.setLayout(self.grid)

    def edit_script(self):
        if self.obj.type_ != "None":
            self.parent.editor = Editor(self.parent, self.obj)
            self.parent.editor.showMaximized()
        self.parent.affichage.update_screen()

    def set_text_for(self, text, prop):
        self.obj.set_property(prop, text)
        if prop == "Nom":
            if self.parent.project.objects[0].properties[
                    "Monde Actuel"] == self.obj.name:
                self.parent.project.objects[0].properties[
                    "Monde Actuel"] = text
            element = self.parent.elements.get_item(self.obj.name)
            if element is not None:
                element.setText(0, text)
                self.obj.name = text
        self.parent.affichage.update_screen()

    def set_bool_for(self, state, prop):
        self.obj.set_property(prop, bool(state))
        self.parent.affichage.update_screen()

    def set_int_for(self, value, prop):
        self.obj.set_property(prop, value)
        self.parent.affichage.update_screen()

    def set_none_for(self, prop):
        self.obj.set_property(prop, None)
        self.parent.affichage.update_screen()

    def set_file_for(self, prop):
        directory = os.environ.get(
            'HOME', os.environ.get('USERPROFILE', os.path.dirname(__file__)))
        self.obj.set_property(
            prop,
            QFileDialog.getOpenFileName(self, "Fichier : " + prop,
                                        directory)[0])
        self.parent.affichage.update_screen()

    def set_files_for(self, prop):
        directory = os.environ.get(
            'HOME', os.environ.get('USERPROFILE', os.path.dirname(__file__)))
        self.obj.set_property(
            prop,
            QFileDialog.getOpenFileNames(self, "Fichiers : " + prop,
                                         directory)[0])
        self.parent.affichage.update_screen()

    def set_color_for(self, prop):
        if self.obj.properties[prop] is not None:
            qcolor = QColorDialog.getColor(QColor(*self.obj.properties[prop]))
        else:
            qcolor = QColorDialog.getColor()
        self.obj.set_property(
            prop, [qcolor.red(), qcolor.green(),
                   qcolor.blue()])
        self.parent.affichage.update_screen()
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.resize(1280, 720)
        self.central_widget = QWidget(MainWindow)

        self.splitter = QSplitter(self.central_widget)
        self.splitter.setChildrenCollapsible(False)
        self.splitter.setOpaqueResize(True)

        self.main_grid_layout = QGridLayout(self.central_widget)
        self.main_grid_layout.addWidget(self.splitter)
        self.main_grid_layout.setSizeConstraint(QLayout.SetDefaultConstraint)

        self.tab_widget = QTabWidget(self.central_widget)
        self.tab_widget.setMinimumSize(QSize(500, 0))
        self._set_up_component_tree_view()
        self.splitter.addWidget(self.tab_widget)

        self._set_up_3d_view()

        MainWindow.setCentralWidget(self.central_widget)

        self._set_up_menus(MainWindow)
        self.tab_widget.setCurrentIndex(0)
        QMetaObject.connectSlotsByName(MainWindow)
        self.splitter.setStretchFactor(0, 0)
        self.splitter.setStretchFactor(1, 1)

    def _set_up_3d_view(self):
        self.sceneWidget.setMinimumSize(QSize(600, 0))
        self.splitter.addWidget(self.sceneWidget)

    def _set_up_component_tree_view(self):
        self.sceneWidget = InstrumentView(self.splitter)
        self.component_tree_view_tab = ComponentTreeViewTab(
            scene_widget=self.sceneWidget, parent=self
        )
        self.tab_widget.addTab(self.component_tree_view_tab, "")

    def _set_up_menus(self, MainWindow: QObject):
        self.menu_bar = QMenuBar()
        self.menu_bar.setGeometry(QRect(0, 0, 1280, 720))
        self.file_menu = QMenu(self.menu_bar)
        MainWindow.setMenuBar(self.menu_bar)
        self.status_bar = QStatusBar(MainWindow)
        MainWindow.setStatusBar(self.status_bar)
        self.open_json_file_action = QAction(MainWindow)
        self.open_json_file_action.setShortcut(QKeySequence("Ctrl+O"))
        self.export_to_filewriter_JSON_action = QAction(MainWindow)
        self.export_to_filewriter_JSON_action.setShortcut(QKeySequence("Ctrl+S"))
        self.file_menu.addAction(self.open_json_file_action)
        self.file_menu.addAction(self.export_to_filewriter_JSON_action)

        self.view_menu = QMenu(self.menu_bar)
        self.show_action_labels = QAction(MainWindow)
        self.show_action_labels.setCheckable(True)
        self.show_action_labels.setChecked(True)
        self.simple_tree_view = QAction(MainWindow)
        self.simple_tree_view.setCheckable(True)
        self.about_window = QAction(MainWindow)
        self.view_menu.addAction(self.about_window)
        self.view_menu.addAction(self.show_action_labels)
        self.view_menu.addAction(self.simple_tree_view)

        self.menu_bar.addAction(self.file_menu.menuAction())
        self.menu_bar.addAction(self.view_menu.menuAction())
        self._set_up_titles(MainWindow)

    def _set_up_titles(self, MainWindow):
        MainWindow.setWindowTitle("NeXus Constructor")
        self.tab_widget.setTabText(
            self.tab_widget.indexOf(self.component_tree_view_tab), "Nexus Structure"
        )
        self.file_menu.setTitle("File")
        self.open_json_file_action.setText("Open File writer JSON file")
        self.export_to_filewriter_JSON_action.setText("Export to File writer JSON")

        self.view_menu.setTitle("View")
        self.show_action_labels.setText("Show Button Labels")
        self.simple_tree_view.setText("Use Simple Tree Model View")
        self.about_window.setText("About")

        self.menu_bar.setNativeMenuBar(False)
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.resize(1280, 720)
        self.central_widget = QWidget(MainWindow)

        self.splitter = QSplitter(self.central_widget)
        self.splitter.setChildrenCollapsible(False)
        self.splitter.setOpaqueResize(True)

        self.main_grid_layout = QGridLayout(self.central_widget)
        self.main_grid_layout.addWidget(self.splitter)
        self.main_grid_layout.setSizeConstraint(QLayout.SetDefaultConstraint)

        self.tab_widget = QTabWidget(self.central_widget)
        self.tab_widget.setMinimumSize(QSize(500, 0))
        self._set_up_component_tree_view()
        self._set_up_silx_view()
        self.splitter.addWidget(self.tab_widget)

        self._set_up_3d_view()

        MainWindow.setCentralWidget(self.central_widget)

        self._set_up_menus(MainWindow)
        self.tab_widget.setCurrentIndex(0)
        QMetaObject.connectSlotsByName(MainWindow)
        self.splitter.setStretchFactor(0, 0)
        self.splitter.setStretchFactor(1, 1)

    def _set_up_3d_view(self):
        self.sceneWidget = InstrumentView(self.splitter)
        self.sceneWidget.setMinimumSize(QSize(600, 0))
        self.splitter.addWidget(self.sceneWidget)

    def _set_up_silx_view(self):
        self.silx_tab = QWidget()
        self.silx_tab_layout = QGridLayout(self.silx_tab)
        self.tab_widget.addTab(self.silx_tab, "")

    def _set_up_component_tree_view(self):
        self.component_tree_view_tab = ComponentTreeViewTab(parent=self)
        self.tab_widget.addTab(self.component_tree_view_tab, "")

    def _set_up_menus(self, MainWindow):
        self.menu_bar = QMenuBar()
        self.menu_bar.setGeometry(QRect(0, 0, 1280, 720))
        self.file_menu = QMenu(self.menu_bar)
        MainWindow.setMenuBar(self.menu_bar)
        self.status_bar = QStatusBar(MainWindow)
        MainWindow.setStatusBar(self.status_bar)
        self.open_nexus_file_action = QAction(MainWindow)
        self.open_json_file_action = QAction(MainWindow)
        self.open_idf_file_action = QAction(MainWindow)
        self.export_to_nexus_file_action = QAction(MainWindow)
        self.export_to_filewriter_JSON_action = QAction(MainWindow)
        self.export_to_forwarder_JSON_action = QAction(MainWindow)
        self.file_menu.addAction(self.open_nexus_file_action)
        self.file_menu.addAction(self.open_json_file_action)
        self.file_menu.addAction(self.open_idf_file_action)
        self.file_menu.addAction(self.export_to_nexus_file_action)
        self.file_menu.addAction(self.export_to_filewriter_JSON_action)
        self.file_menu.addAction(self.export_to_forwarder_JSON_action)
        self.menu_bar.addAction(self.file_menu.menuAction())
        self._set_up_titles(MainWindow)

    def _set_up_titles(self, MainWindow):
        MainWindow.setWindowTitle("NeXus Constructor")
        self.tab_widget.setTabText(
            self.tab_widget.indexOf(self.component_tree_view_tab), "Components"
        )
        self.tab_widget.setTabText(
            self.tab_widget.indexOf(self.silx_tab), "NeXus File Layout"
        )
        self.file_menu.setTitle("File")
        self.open_nexus_file_action.setText("Open NeXus file")
        self.open_json_file_action.setText("Open Filewriter JSON file")

        self.open_idf_file_action.setText("Open Mantid IDF file")
        self.export_to_nexus_file_action.setText("Export to NeXus file")
        self.export_to_filewriter_JSON_action.setText("Export to Filewriter JSON")
        self.export_to_forwarder_JSON_action.setText("Export to Forwarder JSON")
Beispiel #11
0
class Window(QDialog):
    def __init__(self):
        super(Window, self).__init__()
        self.label = QLabel('Enter Your Age')
        self.lineEdit = QLineEdit()
        self.label1 = QLabel('Year of Birth')
        self.combo1 = QComboBox()

        self.okButton = QPushButton('OK')
        self.moreButton = QPushButton('More')
        self.moreButton.setCheckable(True)

        self.groupBox = QGroupBox()
        self.groupBox.setTitle('Details')
        self.nameLabel = QLabel('Name')
        self.nameLineEdit = QLineEdit()
        self.label3 = QLabel('Year of Birth')
        self.combo2 = QComboBox()

        self.topLayout1 = QHBoxLayout()
        self.topLayout1.addWidget(self.label)
        self.topLayout1.addWidget(self.lineEdit)

        self.topLayout2 = QHBoxLayout()
        self.topLayout2.addWidget(self.label1)
        self.topLayout2.addWidget(self.combo1)
        for x in range(ord('A'), ord('F')):
            self.combo1.addItem(str(chr(x)))

        self.leftLayout = QVBoxLayout()
        self.leftLayout.addLayout(self.topLayout1)
        self.leftLayout.addLayout(self.topLayout2)
        self.leftLayout.addStretch()

        self.rightLayout = QVBoxLayout()
        self.rightLayout.addWidget(self.okButton)
        self.rightLayout.addWidget(self.moreButton)

        self.bottomLayout1 = QHBoxLayout()
        self.bottomLayout1.addWidget(self.nameLabel)
        self.bottomLayout1.addWidget(self.nameLineEdit)

        self.bottomLayout2 = QHBoxLayout()
        self.bottomLayout2.addWidget(self.label3)
        self.bottomLayout2.addWidget(self.combo2)
        self.combo2.addItem("None")

        self.bottomLayout = QVBoxLayout()
        self.bottomLayout.addLayout(self.bottomLayout1)
        self.bottomLayout.addLayout(self.bottomLayout2)

        self.groupBox.setLayout(self.bottomLayout)
        self.groupBox.setVisible(False)
        self.moreButton.toggled.connect(lambda v: self.groupBox.setVisible(v))

        self.combo2.setMinimumSize(self.combo2.sizeHint())

        self.mainLayout = QGridLayout()
        self.mainLayout.addLayout(self.leftLayout, 0, 0)
        self.mainLayout.addLayout(self.rightLayout, 0, 1)
        # self.mainLayout.addLayout(self.bottomLayout, 1, 0)
        self.mainLayout.addWidget(self.groupBox)
        self.mainLayout.setSizeConstraint(QLayout.SetFixedSize)

        self.setLayout(self.mainLayout)

    def title(self):
        return 'Window'
Beispiel #12
0
    def __init__(self, parent=None):
        super(Calculator, self).__init__(parent)

        self.pendingAdditiveOperator = ''
        self.pendingMultiplicativeOperator = ''

        self.sumInMemory = 0.0
        self.sumSoFar = 0.0
        self.factorSoFar = 0.0
        self.waitingForOperand = True

        self.display = QLineEdit('0')
        self.display.setReadOnly(True)
        self.display.setAlignment(Qt.AlignRight)
        self.display.setMaxLength(15)

        font = self.display.font()
        font.setPointSize(font.pointSize() + 8)
        self.display.setFont(font)

        self.digitButtons = []

        for i in range(Calculator.NumDigitButtons):
            self.digitButtons.append(
                self.createButton(str(i), self.digitClicked))

        self.pointButton = self.createButton(".", self.pointClicked)
        self.changeSignButton = self.createButton(u"\N{PLUS-MINUS SIGN}",
                                                  self.changeSignClicked)

        self.backspaceButton = self.createButton("Backspace",
                                                 self.backspaceClicked)
        self.clearButton = self.createButton("C", self.clear)
        self.clearAllButton = self.createButton("CE", self.clearAll)

        self.clearMemoryButton = self.createButton("MC", self.clearMemory)
        self.readMemoryButton = self.createButton("MR", self.readMemory)
        self.setMemoryButton = self.createButton("MS", self.setMemory)
        self.addToMemoryButton = self.createButton("M+", self.addToMemory)

        self.divisionButton = self.createButton(
            u"\N{DIVISION SIGN}", self.multiplicativeOperatorClicked)
        self.timesButton = self.createButton(
            u"\N{MULTIPLICATION SIGN}", self.multiplicativeOperatorClicked)
        self.minusButton = self.createButton("-", self.additiveOperatorClicked)
        self.plusButton = self.createButton("+", self.additiveOperatorClicked)

        self.squareRootButton = self.createButton("Sqrt",
                                                  self.unaryOperatorClicked)
        self.powerButton = self.createButton(u"x\N{SUPERSCRIPT TWO}",
                                             self.unaryOperatorClicked)
        self.reciprocalButton = self.createButton("1/x",
                                                  self.unaryOperatorClicked)
        self.equalButton = self.createButton("=", self.equalClicked)

        mainLayout = QGridLayout()
        mainLayout.setSizeConstraint(QLayout.SetFixedSize)

        mainLayout.addWidget(self.display, 0, 0, 1, 6)
        mainLayout.addWidget(self.backspaceButton, 1, 0, 1, 2)
        mainLayout.addWidget(self.clearButton, 1, 2, 1, 2)
        mainLayout.addWidget(self.clearAllButton, 1, 4, 1, 2)

        mainLayout.addWidget(self.clearMemoryButton, 2, 0)
        mainLayout.addWidget(self.readMemoryButton, 3, 0)
        mainLayout.addWidget(self.setMemoryButton, 4, 0)
        mainLayout.addWidget(self.addToMemoryButton, 5, 0)

        for i in range(1, Calculator.NumDigitButtons):
            row = ((9 - i) / 3) + 2
            column = ((i - 1) % 3) + 1
            mainLayout.addWidget(self.digitButtons[i], row, column)

        mainLayout.addWidget(self.digitButtons[0], 5, 1)
        mainLayout.addWidget(self.pointButton, 5, 2)
        mainLayout.addWidget(self.changeSignButton, 5, 3)

        mainLayout.addWidget(self.divisionButton, 2, 4)
        mainLayout.addWidget(self.timesButton, 3, 4)
        mainLayout.addWidget(self.minusButton, 4, 4)
        mainLayout.addWidget(self.plusButton, 5, 4)

        mainLayout.addWidget(self.squareRootButton, 2, 5)
        mainLayout.addWidget(self.powerButton, 3, 5)
        mainLayout.addWidget(self.reciprocalButton, 4, 5)
        mainLayout.addWidget(self.equalButton, 5, 5)
        self.setLayout(mainLayout)

        self.setWindowTitle("Calculator")