PyQt5 - не удается добавить элементы в QTabWidget - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь добавить вторую вкладку (содержащую визуализацию диаграммы ap ie) к своему PyQt5 GUI, но не могу понять, как ее отобразить. Эта вторая вкладка расположена в отдельном классе, и моя программа имеет следующую структуру:

main.py

from PyQt5 import QtWidgets, QtCore
from gui import UiMainWindow
import sys

class Logic(QtWidgets.QMainWindow, UiMainWindow,):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.treeView = QtWidgets.QTreeView(self.tabwidget.main_tab)
        self.treeView.setGeometry(QtCore.QRect(270, 90, 801, 571))

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    logic = Logic()
    logic.show()
    sys.exit(app.exec_())

gui .py

from PyQt5 import QtWidgets, QtCore
from main_tab import MainTab


class UiMainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("Invoice Manager")
        MainWindow.resize(1120, 750)
        MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.tabwidget = MainTab(self.centralwidget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        self.tabwidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("Test", "Test"))
        self.tabwidget.setTabText(
            self.tabwidget.indexOf(self.tabwidget.main_tab), 
        _translate("MainWindow", "Main"))
        self.tabwidget.setTabText(
            self.tabwidget.indexOf(self.tabwidget.visual_tab),
        _translate("MainWindow", "Tab_2"))

main_tab.py

from PyQt5 import QtCore, QtWidgets
from tab_2 import Tab2


class MainTab(QtWidgets.QTabWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setGeometry(QtCore.QRect(0, 0, 1120, 750))
        self.main_tab = QtWidgets.QWidget()
        self.addTab(self.main_tab, "")
        self.visual_tab = Tab2()
        self.addTab(self.visual_tab, "")

tab_2.py

from PyQt5 import QtWidgets
from PyQt5.QtChart import QChart, QChartView, QPieSeries, QPieSlice
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt


class Tab2(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.layout = QtWidgets.QVBoxLayout()
        self.setLayout(self.layout)
        self.create_piechart()

    def create_piechart(self):
        series = QPieSeries()
        series.append("Label 1", 2)
        series.append("Label 2", 2)
        series.append("Label 3", 2)

        pie_slice = QPieSlice()
        pie_slice.setExploded(True)
        pie_slice.setLabelVisible(True)
        pie_slice.setPen(QPen(Qt.darkGreen, 2))
        pie_slice.setBrush(Qt.green)

        chart = QChart()
        chart.legend().hide()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chart.setAnimationOptions(QChart.SeriesAnimations)
        chart.setTitle("Pie Chart Example")

        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)

        chartview = QChartView(chart)
        chartview.setRenderHint(QPainter.Antialiasing)

У меня есть пробовал разные решения, но пока не повезло. Любая помощь будет высоко ценится!

...