我目前正在学习如何将pyqt5
与matplotlib
一起使用,因此实现此代码,当我按下另一个窗口中的按钮后,该代码将弹出
我创建了另一个名为canvas
的类,以便将来创建多个图形,如条形图和直方图
当我运行此代码时,窗口将出现,按钮也将出现,但不是我创建的画布
如何在主窗口中显示画布(饼图)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import numpy as np
import PyQt5
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class window(QtWidgets.QMainWindow):
def setupUi(self,Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(900, 500)
self.pushButton = QtWidgets.QPushButton(Dialog)
self.pushButton.setGeometry(QtCore.QRect(0, 380, 141, 61))
self.pushButton.setObjectName("pushButton")
self.canvas = Canvas(self, width=8, height=4)
self.canvas.move(0,0)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "output window"))
class Canvas(FigureCanvas):
def __init__(self, parent = None, width = 5, height = 5, dpi = 100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
FigureCanvas.__init__(self, fig)
self.setParent(parent)
self.plot()
def plot(self):
x = np.array([50, 30,40])
labels = ["Apples", "Bananas", "Melons"]
ax = self.figure.add_subplot(111)
ax.pie(x, labels=labels)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = window()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
造成此问题的原因是,您正在修改Qt Designer生成的代码,而不了解其后果。QtDesigner生成的类不是窗口,而是一个只填充窗口的类。例如,在窗口修改的情况下,QMainWindow具有画布,但您已经创建了另一个名为Dialog的小部件,该小部件就是您显示的小部件(如果您选中QPushButton,则它是Dialog的子部件,因此也会显示)。另一方面,您只需创建一个轴
因此,您不应该修改QtDesigner生成的类,而应该创建从小部件继承的另一个类,并使用前一个类填充它
相关问题 更多 >
编程相关推荐