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)
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_())