PyQt5,如何在特定小部件内显示PieChart? [关闭]

问题描述 投票:0回答:1
我需要在我称为widget的特定widget中显示我的PieChart。这是我的代码,出现一个小错误,没有停止应用程序运行,但没有显示PieChart。错误:

QLayout: Attempting to add QLayout "" to QWidget "widget", which already has a layout

代码:

self.smallgraph = QChart() self.uneserie = QPieSeries() self.uneserie.append('test1',3) self.uneserie.append('test2', 6) self.uneserie.append('test3', 2) self.smallgraph.addSeries(self.uneserie) self.smallgraph.setTitle("Total per class") self.ChartView = QChartView(self.smallgraph) self.ChartView.setRenderHint(QPainter.Antialiasing)

如果我使用以下行,则会显示饼形图,但会占用整个窗口来恢复所有内容。 

#self.setCentralWidget(self.ChartView)

然后,如果我使用此命令,则会收到错误消息,我在某些示例中看到他们使用了这样的布局。我已经将窗口小部件对象(self.ui.widget)准备好在窗口中且位置良好。我只需要它来显示饼图!我感觉我很亲密!

self.ui.xLayout = QGridLayout(self.ui.widget) self.ui.xLayout.addWidget(self.ChartView)

python pyqt5 pie-chart pyqtchart
1个回答
0
投票
这里是一个简化的版本,可以使用。

from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import * from PyQt5.QtGui import QColor, QIcon, QPixmap,QPainter from PyQt5.QtChart import * class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(828, 600) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.widget = QtWidgets.QWidget(self.centralwidget) self.widget.setGeometry(QtCore.QRect(230, 120, 381, 251)) self.widget.setObjectName("widget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(360, 430, 131, 51)) self.pushButton.setObjectName("pushButton") MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "PushButton")) self.pushButton.clicked.connect(self.btn_clicked) def btn_clicked(self): self.smallgraph = QChart() self.uneserie = QPieSeries() self.uneserie.append('test1',3) self.uneserie.append('test2', 6) self.uneserie.append('test3', 2) self.smallgraph.addSeries(self.uneserie) self.smallgraph.setTitle("PieChart Title") self.ChartView = QChartView(self.smallgraph) self.ChartView.setRenderHint(QPainter.Antialiasing) self.xLayout = QGridLayout(self.widget) self.xLayout.addWidget(self.ChartView) #The next line is important to be able to click several times on the button and refresh the PieChart! self.xLayout.deleteLater() if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())

© www.soinside.com 2019 - 2024. All rights reserved.