Как сделать панель вкладок без строки заголовка? - PullRequest
0 голосов
/ 25 февраля 2019

Я хочу сделать GUI, как показано ниже, с PyQt5, но я не могу найти пример, чтобы помочь мне.Я безуспешно искал «изменить макет на qwidget» и «панель вкладок без строки заголовка» и «макет карты».Как я могу сделать это с PyQt5?



1 Ответ

0 голосов
/ 25 февраля 2019

Вы должны использовать QStackedLayout (или QStackedWidget), который изменяет страницы при нажатии кнопок.И на первой странице должны быть кнопки.Я также реализовал метод back(), который возвращает на начальную страницу, этот слот должен вызываться при нажатии кнопки Изменить:

from functools import partial
from PyQt5 import QtCore, QtWidgets

class CardWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(CardWidget, self).__init__(parent)
        self._layout = QtWidgets.QStackedLayout(self)
        button_widget = QtWidgets.QWidget()
        self.btn_lay = QtWidgets.QFormLayout(button_widget)

        self._layout.addWidget(button_widget)

    def add_widget(self, text, widget):
        self._layout.addWidget(widget)
        btn = QtWidgets.QPushButton(text)
        self.btn_lay.addRow(btn)
        btn.clicked.connect(partial(self._layout.setCurrentWidget, widget))

    @QtCore.pyqtSlot()
    def back(self):
        self._layout.setCurrentIndex(0)


class Widget(QtWidgets.QWidget):
    backSignal = QtCore.pyqtSignal()

    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        self.le1 = QtWidgets.QLineEdit()
        self.le2 = QtWidgets.QLineEdit()

        button = QtWidgets.QPushButton("Change")
        button.clicked.connect(self.backSignal)

        flay = QtWidgets.QFormLayout()
        flay.addRow("Value 1:", self.le1)
        flay.addRow("Value 2:", self.le2)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addLayout(flay)
        lay.addWidget(button)


def create_label():
    label = QtWidgets.QLabel(
        "Some Other Components", 
        alignment=QtCore.Qt.AlignCenter
    )
    label.setStyleSheet("background-color:blue;")
    return label


if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)

    c = CardWidget()
    for i in range(3):
        w = Widget()
        w.backSignal.connect(c.back)
        c.add_widget("Want to Change value {}".format(i+1), w)

    p = QtWidgets.QWidget()
    lay = QtWidgets.QGridLayout(p)
    lay.addWidget(create_label(), 0, 0, 1, 2)
    lay.addWidget(c, 1, 0)
    lay.addWidget(create_label(), 1, 1)
    lay.setColumnStretch(0, 1)
    lay.setColumnStretch(1, 1)
    lay.setRowStretch(0, 1)
    lay.setRowStretch(1, 1)
    p.resize(640, 480)
    p.show()
    sys.exit(app.exec_())

enter image description here

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...