QTabWidget не работает должным образом в PyQt5 - PullRequest
0 голосов
/ 10 января 2020

Мне нужно иметь несколько вкладок в моем окне. Были добавлены две разные вкладки, однако, если я нажму на вторую вкладку, на первой вкладке останутся виджеты (см. Рисунки ниже). Я думаю, что виджеты второй вкладки только позади, но я не уверен. Вот мой код:

from PyQt5.QtWidgets import QDialog
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout,QPushButton, QTabWidget
import sys

class confWindow(QDialog):
    def __init__(self):
        super().__init__()
        self.title = "Main window"
        self.width = App.primaryScreen().size().width()/3
        self.height = App.primaryScreen().size().height()/2
        self.setWindowTitle(self.title)
        self.setGeometry(300, 300, self.width, self.height)

        tabs = QTabWidget(self)
        tabs.setFixedSize(self.width, self.height)
        tab1 = QWidget()
        tab1.layout = QVBoxLayout(tabs)
        tab1.layout.addWidget(QPushButton("1"))
        tab1.layout.addWidget(QPushButton("2"))
        tabs.addTab(tab1, "TAB1")

        tab2 = QWidget()
        tab2.layout = QVBoxLayout(tabs)
        tab2.layout.addWidget(QPushButton("3"))
        tabs.addTab(tab2, "TAB2")

        self.show()

if __name__ == '__main__':
    App = QApplication(sys.argv)
    window = confWindow()
    sys.exit(App.exec())

Изображения:
TAB 1
TAB 2

1 Ответ

1 голос
/ 10 января 2020

tab1.layout = QVBoxLayout(tabs) не будет определять макет для tab1, но для tabs. Тот факт, что макет назначен атрибуту tab1, не сделает его макетом tab1. Чтобы установить макет для каждой вкладки, вам нужно сделать что-то вроде этого:

class confWindow(QDialog):
    def __init__(self):
        ...
        tab1 = QWidget()
        layout = QVBoxLayout(tab1)
        layout.addWidget(QPushButton("1"))
        layout.addWidget(QPushButton("2"))
        ...
        tab2 = QWidget()
        layout = QVBoxLayout(tab2)
        layout.addWidget(QPushButton("3"))
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...