import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from PyQt5 import QtCore, QtWidgets
- 在qt designer里,创建一个界面,加入一个GroupBox,加入两个PushButton,如图:
![]()
- 用pycharm转换成py文件。这个文件可以导入,代码界面分离,也可以直接放在主py文件内,本文是界面代码放在一起的。
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(807, 619)
self.groupBox = QtWidgets.QGroupBox(Form)
self.groupBox.setGeometry(QtCore.QRect(60, 100, 611, 451))
self.groupBox.setObjectName("groupBox")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(120, 40, 75, 23))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(220, 40, 75, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
class MyFigure(FigureCanvas):
def __init__(self, width=10, height=8, dpi=100): # dpi 越大图的线条越粗,颜色越深,有放大作用
self.fig = Figure(figsize=(width, height), dpi=dpi)
super(MyFigure, self).__init__(self.fig)
self.axes = self.fig.add_subplot(111)
class ImgMain(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.ui = Ui_Form()
self.ui.setupUi(self)
self.ui.pushButton.clicked.connect(self.plotcos) #槽函数画图
self.ui.pushButton_2.clicked.connect(self.clean) #槽函数清图
def plotcos(self):
self.ui.groupBox.show() # 显示groupBox的控件,因为后面有个关闭
self.F = MyFigure(1, 1, 80)
self.gridlayout = QGridLayout(self.ui.groupBox)
self.gridlayout.addWidget(self.F, 0, 1)
x = [1, 2, 3, 4, 5, 6, 7, 8]
s = [2, 8, 6, 12, 10, 11, 8, 5]
self.F.axes.plot(x, s)
self.F.fig.suptitle('line')
def clean(self):
self.ui.groupBox.close()
if __name__ == "__main__":
app = QApplication(sys.argv)
form = ImgMain()
form.show()
sys.exit(app.exec_())
![]()