Ejemplo n.º 1
0
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setWindowTitle("My App")

        label = QLabel("Hello")
        font = label.font()
        font.setPointSize(30)
        label.setFont(font)
        label.setAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
        self.setCentralWidget(label)
Ejemplo n.º 2
0
def test_text(pixmap_differ: PixmapDiffer):
    actual: QPainter
    expected: QPainter
    with pixmap_differ.create_painters(300, 240,
                                       'scaled_label_text') as (actual,
                                                                expected):
        ex_widget = QWidget()
        ex_layout = QVBoxLayout(ex_widget)
        ex_label1 = QLabel('Lorem ipsum')
        ex_label2 = QLabel('Lorem ipsum')
        ex_font = ex_label1.font()
        if ex_font.family() == 'Sans Serif':
            # Fonts are different on GitHub actions.
            big_font_size = 32
            small_font_size = 27
        else:
            big_font_size = 35
            small_font_size = 28
        ex_font.setPointSize(big_font_size)
        ex_label1.setFont(ex_font)
        ex_font.setPointSize(small_font_size)
        ex_label2.setFont(ex_font)
        ex_size_policy = QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        ex_label1.setSizePolicy(ex_size_policy)
        ex_label1.setAlignment(Qt.AlignBottom)
        ex_label2.setAlignment(Qt.AlignTop)
        ex_label2.setSizePolicy(ex_size_policy)
        ex_layout.addWidget(ex_label1)
        ex_layout.addWidget(ex_label2)
        ex_layout.setStretch(0, 4)
        ex_layout.setStretch(1, 1)

        ex_widget.resize(300, 240)
        expected.drawPixmap(0, 0, ex_widget.grab())

        widget = QWidget()
        layout = QVBoxLayout(widget)
        label1 = ScaledLabel('Lorem ipsum')
        label2 = ScaledLabel('Lorem ipsum')
        size_policy = QSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        label1.setSizePolicy(size_policy)
        label2.setSizePolicy(size_policy)
        label1.setScaledContents(True)
        label2.setScaledContents(True)
        label1.setAlignment(Qt.AlignBottom)
        label2.setAlignment(Qt.AlignTop)
        layout.addWidget(label1)
        layout.addWidget(label2)
        layout.setStretch(0, 4)
        layout.setStretch(1, 1)

        widget.resize(300, 240)

        actual.drawPixmap(0, 0, widget.grab())
Ejemplo n.º 3
0
 def _setup_view_widget(self,
                        view_widget,
                        title,
                        model,
                        update_slot,
                        width=250):
     view_widget.set_model(model)
     view_widget.selection_behavior = QtWidgets.QAbstractItemView.SelectRows
     view_widget.selection_model().selectionChanged.connect(update_slot)
     view_widget.edit_triggers = QtWidgets.QAbstractItemView.NoEditTriggers
     count_widget = QLabel()
     count_widget.alignment = Qt.AlignRight
     font = count_widget.font
     font.set_italic(True)
     count_widget.font = font
     widget = QWidget()
     if width > 0:
         widget.set_fixed_width(width)
     layout = QVBoxLayout(widget)
     layout.add_widget(QLabel(title))
     layout.add_widget(view_widget)
     layout.add_widget(count_widget)
     layout.contents_margins = QtCore.QMargins(0, 0, 0, 0)
     return view_widget, count_widget, widget
Ejemplo n.º 4
0
    def __init__(self, parent, text: str, color: QColor, onChange):
        """
            onChange( QColor ) : called when a color is chosen. Receives the new color as argument
        """

        super(ColorButton, self).__init__(parent)

        # reference to the color dialog that is opened
        self.color_dialog = None

        # elements
        button = QPushButton()
        button.setFixedWidth(50)
        label = QLabel(text)

        # reduce the font-weight of the label
        font = label.font()
        font.setWeight(QFont.Thin)
        label.setFont(font)

        layout = QGridLayout()
        layout.setContentsMargins(QMargins(0, 0, 0, 0))

        layout.addWidget(label, 0, 0)
        layout.addWidget(button, 0, 1)

        self.setLayout(layout)
        self.show()

        button.clicked.connect(self.onClick)

        self.button = button
        self.color = color
        self.on_change = onChange

        self.styleButton()
Ejemplo n.º 5
0
class GameWindow(QtWidgets.QWidget):

    grid: QGridLayout
    label: QLabel
    game_state: GameState

    def __init__(self, is_server: bool):
        super().__init__()
        self.is_server = is_server
        self.game_state = GameState(GAME_SZIE, self._refresh_ui)
        self._init_window()
        self._init_ui()
        self.game_state.setup_multiplayer_connection(is_server)

    def _init_window(self):
        self.resize(800, 800)

        if self.is_server == None:
            postfix = "single player"
        else:
            if self.is_server:
                postfix = "multi player (server)"
            else:
                postfix = "multi player (client)"

        self.setWindowTitle(f"Multiplayer Tic Tac Teo - {postfix}")
        self.show()

    def _init_ui(self):
        hbox = QVBoxLayout()
        self.setLayout(hbox)
        self.label = QLabel()
        self.label.setText(f"Turn {self.game_state.turn.value}")
        f: QtGui.QFont = self.label.font()
        f.setPixelSize(50)
        self.label.setFont(f)
        hbox.addWidget(self.label, alignment=Qt.AlignCenter)
        self.grid = QGridLayout()
        hbox.addLayout(self.grid)

        for y in range(0, GAME_SZIE):
            for x in range(0, GAME_SZIE):
                button = QPushButton()
                button.setText(self.game_state.get(x, y).value)
                f: QtGui.QFont = button.font()
                f.setPixelSize(50)
                button.setFont(f)
                button.setSizePolicy(QSizePolicy.Expanding,
                                     QSizePolicy.Expanding)
                button.clicked.connect(
                    self.get_tile_clicked_listener(button, x, y))
                self.grid.addWidget(button, y, x)

    def _get_button_at(self, x, y) -> QPushButton:
        return self.grid.itemAtPosition(y, x).widget()

    def _refresh_ui(self):
        self.label.setText(f"Turn {self.game_state.turn.value}")

        for y in range(0, GAME_SZIE):
            for x in range(0, GAME_SZIE):
                txt = self.game_state.get(x, y).value
                self._get_button_at(x, y).setText(txt)

        winner = self.game_state.winner
        if winner:
            msgBox = QMessageBox()
            if winner == TileState.EMPTY:
                msgBox.setText(f"Tie")
            else:
                msgBox.setText(f"Winner is {winner.value}")
            msgBox.exec()
            self.game_state.new_game()

    def get_tile_clicked_listener(self, button: QPushButton, x: int, y: int):
        def click_action():
            if self.game_state.user_tile_type == self.game_state.turn:
                self.game_state.set(x, y, self.game_state.user_tile_type)

        return click_action
class ApplicationWindow(QMainWindow):
    """
    Example based on the example by 'scikit-image' gallery:
    "Immunohistochemical staining colors separation"
    https://scikit-image.org/docs/stable/auto_examples/color_exposure/plot_ihc_color_separation.html
    """
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self._main = QWidget()
        self.setCentralWidget(self._main)

        # Main menu bar
        self.menu = self.menuBar()
        self.menu_file = self.menu.addMenu("File")
        exit = QAction("Exit", self, triggered=qApp.quit)
        self.menu_file.addAction(exit)

        self.menu_about = self.menu.addMenu("&About")
        about = QAction("About Qt",
                        self,
                        shortcut=QKeySequence(QKeySequence.HelpContents),
                        triggered=qApp.aboutQt)
        self.menu_about.addAction(about)

        # Create an artificial color close to the original one
        self.ihc_rgb = data.immunohistochemistry()
        self.ihc_hed = rgb2hed(self.ihc_rgb)

        main_layout = QVBoxLayout(self._main)
        plot_layout = QHBoxLayout()
        button_layout = QHBoxLayout()
        label_layout = QHBoxLayout()

        self.canvas1 = FigureCanvas(Figure(figsize=(5, 5)))
        self.canvas2 = FigureCanvas(Figure(figsize=(5, 5)))

        self._ax1 = self.canvas1.figure.subplots()
        self._ax2 = self.canvas2.figure.subplots()

        self._ax1.imshow(self.ihc_rgb)

        plot_layout.addWidget(self.canvas1)
        plot_layout.addWidget(self.canvas2)

        self.button1 = QPushButton("Hematoxylin")
        self.button2 = QPushButton("Eosin")
        self.button3 = QPushButton("DAB")
        self.button4 = QPushButton("Fluorescence")

        self.button1.setSizePolicy(QSizePolicy.Preferred,
                                   QSizePolicy.Expanding)
        self.button2.setSizePolicy(QSizePolicy.Preferred,
                                   QSizePolicy.Expanding)
        self.button3.setSizePolicy(QSizePolicy.Preferred,
                                   QSizePolicy.Expanding)
        self.button4.setSizePolicy(QSizePolicy.Preferred,
                                   QSizePolicy.Expanding)

        self.button1.clicked.connect(self.plot_hematoxylin)
        self.button2.clicked.connect(self.plot_eosin)
        self.button3.clicked.connect(self.plot_dab)
        self.button4.clicked.connect(self.plot_final)

        self.label1 = QLabel("Original", alignment=Qt.AlignCenter)
        self.label2 = QLabel("", alignment=Qt.AlignCenter)

        font = self.label1.font()
        font.setPointSize(16)
        self.label1.setFont(font)
        self.label2.setFont(font)

        label_layout.addWidget(self.label1)
        label_layout.addWidget(self.label2)

        button_layout.addWidget(self.button1)
        button_layout.addWidget(self.button2)
        button_layout.addWidget(self.button3)
        button_layout.addWidget(self.button4)

        main_layout.addLayout(label_layout, 2)
        main_layout.addLayout(plot_layout, 88)
        main_layout.addLayout(button_layout, 10)

        # Default image
        self.plot_hematoxylin()

    def set_buttons_state(self, states):
        self.button1.setEnabled(states[0])
        self.button2.setEnabled(states[1])
        self.button3.setEnabled(states[2])
        self.button4.setEnabled(states[3])

    @Slot()
    def plot_hematoxylin(self):
        cmap_hema = LinearSegmentedColormap.from_list("mycmap",
                                                      ["white", "navy"])
        self._ax2.imshow(self.ihc_hed[:, :, 0], cmap=cmap_hema)
        self.canvas2.draw()
        self.label2.setText("Hematoxylin")
        self.set_buttons_state((False, True, True, True))

    @Slot()
    def plot_eosin(self):
        cmap_eosin = LinearSegmentedColormap.from_list("mycmap",
                                                       ["darkviolet", "white"])
        self._ax2.imshow(self.ihc_hed[:, :, 1], cmap=cmap_eosin)
        self.canvas2.draw()
        self.label2.setText("Eosin")
        self.set_buttons_state((True, False, True, True))

    @Slot()
    def plot_dab(self):
        cmap_dab = LinearSegmentedColormap.from_list("mycmap",
                                                     ["white", "saddlebrown"])
        self._ax2.imshow(self.ihc_hed[:, :, 2], cmap=cmap_dab)
        self.canvas2.draw()
        self.label2.setText("DAB")
        self.set_buttons_state((True, True, False, True))

    @Slot()
    def plot_final(self):
        h = rescale_intensity(self.ihc_hed[:, :, 0], out_range=(0, 1))
        d = rescale_intensity(self.ihc_hed[:, :, 2], out_range=(0, 1))
        zdh = np.dstack((np.zeros_like(h), d, h))
        self._ax2.imshow(zdh)
        self.canvas2.draw()
        self.label2.setText("Stain separated image")
        self.set_buttons_state((True, True, True, False))