使用 Python、PyQt5 在 GUI 中显示图形

时间:2021-04-28 10:47:15

标签: python matplotlib pyqt5 pyqtgraph

我正在尝试使用 pyqt5 创建图形界面,当我按下按钮“capteur1”时,我想使用 PyqtGraph 或 matplotlib 以如下图所示的图形显示数据。

enter image description here

我使用 Qt 设计器来创建 GUI。

qt 设计器生成的代码:

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *

import picturs_icons_rc

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1051, 763)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.centralwidget.setStyleSheet(u"background-color: rgb(43,31,91);")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.main_header = QFrame(self.centralwidget)
        self.main_header.setObjectName(u"main_header")
        self.main_header.setMaximumSize(QSize(16777215, 50))
        self.main_header.setStyleSheet(u"QFrame{\n"
"   background-color: rgb(0, 0, 0);\n"
" border-bottom: 1px solid #000;\n"
"}")
        self.main_header.setFrameShape(QFrame.WinPanel)
        self.main_header.setFrameShadow(QFrame.Raised)
        self.horizontalLayout_2 = QHBoxLayout(self.main_header)
        self.horizontalLayout_2.setSpacing(0)
        self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
        self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.tittle_bar_container = QFrame(self.main_header)
        self.tittle_bar_container.setObjectName(u"tittle_bar_container")
        self.tittle_bar_container.setStyleSheet(u"")
        self.tittle_bar_container.setFrameShape(QFrame.StyledPanel)
        self.tittle_bar_container.setFrameShadow(QFrame.Raised)

        self.horizontalLayout_2.addWidget(self.tittle_bar_container)

        self.top_right_boutton = QFrame(self.main_header)
        self.top_right_boutton.setObjectName(u"top_right_boutton")
        self.top_right_boutton.setMaximumSize(QSize(90, 16777215))
        self.top_right_boutton.setStyleSheet(u"QPushButton{\n"
"  border-radius:5px;\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"  background-color:rgb(0,92,157);\n"
"}")
        self.top_right_boutton.setFrameShape(QFrame.StyledPanel)
        self.top_right_boutton.setFrameShadow(QFrame.Raised)
        self.horizontalLayout_3 = QHBoxLayout(self.top_right_boutton)
        self.horizontalLayout_3.setSpacing(0)
        self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
        self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
        self.minimise_button = QPushButton(self.top_right_boutton)
        self.minimise_button.setObjectName(u"minimise_button")
        self.minimise_button.setCursor(QCursor(Qt.PointingHandCursor))
        self.minimise_button.setStyleSheet(u"")
        icon = QIcon()
        icon.addFile(u":/images/images/icons8-minimize-window-26.png", QSize(), QIcon.Normal, QIcon.Off)
        self.minimise_button.setIcon(icon)

        self.horizontalLayout_3.addWidget(self.minimise_button)

        self.restore_button = QPushButton(self.top_right_boutton)
        self.restore_button.setObjectName(u"restore_button")
        self.restore_button.setCursor(QCursor(Qt.PointingHandCursor))
        self.restore_button.setStyleSheet(u"")
        icon1 = QIcon()
        icon1.addFile(u":/images/images/icons8-maximize-window-26.png", QSize(), QIcon.Normal, QIcon.Off)
        self.restore_button.setIcon(icon1)

        self.horizontalLayout_3.addWidget(self.restore_button)

        self.close_button = QPushButton(self.top_right_boutton)
        self.close_button.setObjectName(u"close_button")
        self.close_button.setCursor(QCursor(Qt.PointingHandCursor))
        self.close_button.setStyleSheet(u"")
        icon2 = QIcon()
        icon2.addFile(u":/images/images/icons8-close-window-26.png", QSize(), QIcon.Normal, QIcon.Off)
        self.close_button.setIcon(icon2)

        self.horizontalLayout_3.addWidget(self.close_button)


        self.horizontalLayout_2.addWidget(self.top_right_boutton)


        self.verticalLayout.addWidget(self.main_header)

        self.main_body = QFrame(self.centralwidget)
        self.main_body.setObjectName(u"main_body")
        self.main_body.setStyleSheet(u"")
        self.main_body.setFrameShape(QFrame.NoFrame)
        self.main_body.setFrameShadow(QFrame.Raised)
        self.horizontalLayout = QHBoxLayout(self.main_body)
        self.horizontalLayout.setSpacing(0)
        self.horizontalLayout.setObjectName(u"horizontalLayout")
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.left_side_menu = QFrame(self.main_body)
        self.left_side_menu.setObjectName(u"left_side_menu")
        self.left_side_menu.setMaximumSize(QSize(100, 16777215))
        self.left_side_menu.setStyleSheet(u"QFrame{\n"
" background-color:#000;\n"
"}\n"
"\n"
"\n"
"QPushButton{\n"
" padding: 20px 10px;\n"
" border: none;\n"
" border-radius: 10px;\n"
" background-color: #000;\n"
" color: #fff;\n"
"\n"
"}\n"
"\n"
"QPushButton:hover{\n"
"  background-color:rgb(0,92,157);\n"
"}")
        self.left_side_menu.setFrameShape(QFrame.NoFrame)
        self.left_side_menu.setFrameShadow(QFrame.Raised)
        self.verticalLayout_2 = QVBoxLayout(self.left_side_menu)
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.pushButton_7 = QPushButton(self.left_side_menu)
        self.pushButton_7.setObjectName(u"pushButton_7")
        self.pushButton_7.setStyleSheet(u"background-image: url(:/images/images/icons8-home-24.png);\n"
"background-repeat: none;\n"
"padding-left: 30px;\n"
"background-position: center left;\n"
"")
        self.pushButton_7.setIconSize(QSize(22, 16))

        self.verticalLayout_2.addWidget(self.pushButton_7)

        self.pushButton = QPushButton(self.left_side_menu)
        self.pushButton.setObjectName(u"pushButton")
        self.pushButton.setStyleSheet(u"background-image: url(:/images/images/icons8-account-32.png);\n"
"background-repeat: none;\n"
"padding-left: 30px;\n"
"background-position: center left;\n"
"\n"
"")

        self.verticalLayout_2.addWidget(self.pushButton)

        self.pushButton_2 = QPushButton(self.left_side_menu)
        self.pushButton_2.setObjectName(u"pushButton_2")
        self.pushButton_2.setStyleSheet(u"background-image: url(:/images/images/icons8-rain-sensor-30.png);\n"
"background-repeat: none;\n"
"padding-left: 26px;\n"
"background-position: center left;\n"
"")
        self.pushButton_2.setIconSize(QSize(22, 16))

        self.verticalLayout_2.addWidget(self.pushButton_2)

        self.pushButton_3 = QPushButton(self.left_side_menu)
        self.pushButton_3.setObjectName(u"pushButton_3")
        self.pushButton_3.setStyleSheet(u"background-image: url(:/images/images/icons8-rain-sensor-30.png);\n"
"background-repeat: none;\n"
"padding-left: 26px;\n"
"background-position: center left;\n"
"")

        self.verticalLayout_2.addWidget(self.pushButton_3)

        self.pushButton_4 = QPushButton(self.left_side_menu)
        self.pushButton_4.setObjectName(u"pushButton_4")
        self.pushButton_4.setStyleSheet(u"background-image: url(:/images/images/icons8-rain-sensor-30.png);\n"
"background-repeat: none;\n"
"padding-left: 26px;\n"
"background-position: center left;\n"
"")

        self.verticalLayout_2.addWidget(self.pushButton_4)

        self.pushButton_5 = QPushButton(self.left_side_menu)
        self.pushButton_5.setObjectName(u"pushButton_5")
        self.pushButton_5.setStyleSheet(u"background-image: url(:/images/images/icons8-rain-sensor-30.png);\n"
"background-repeat: none;\n"
"padding-left: 26px;\n"
"background-position: center left;\n"
"")

        self.verticalLayout_2.addWidget(self.pushButton_5)

        self.pushButton_6 = QPushButton(self.left_side_menu)
        self.pushButton_6.setObjectName(u"pushButton_6")
        self.pushButton_6.setStyleSheet(u"background-image: url(:/images/images/apps_printer_15747.png);\n"
"background-repeat: none;\n"
"padding-left: 31.5px;\n"
"background-position: center left;\n"
"\n"
"")

        self.verticalLayout_2.addWidget(self.pushButton_6)


        self.horizontalLayout.addWidget(self.left_side_menu)

        self.center_main_items = QFrame(self.main_body)
        self.center_main_items.setObjectName(u"center_main_items")
        self.center_main_items.setStyleSheet(u"")
        self.center_main_items.setFrameShape(QFrame.StyledPanel)
        self.center_main_items.setFrameShadow(QFrame.Raised)

        self.horizontalLayout.addWidget(self.center_main_items)

        self.right_menu_side = QFrame(self.main_body)
        self.right_menu_side.setObjectName(u"right_menu_side")
        self.right_menu_side.setMaximumSize(QSize(100, 16777215))
        self.right_menu_side.setStyleSheet(u"")
        self.right_menu_side.setFrameShape(QFrame.NoFrame)
        self.right_menu_side.setFrameShadow(QFrame.Raised)

        self.horizontalLayout.addWidget(self.right_menu_side)


        self.verticalLayout.addWidget(self.main_body)

        self.main_footer = QFrame(self.centralwidget)
        self.main_footer.setObjectName(u"main_footer")
        self.main_footer.setMaximumSize(QSize(16777215, 40))
        self.main_footer.setStyleSheet(u"\n"
"QFrame{\n"
"\n"
" background-color: rgb(0, 0, 0);\n"
" background-top-color: sold 1px rgb(0,0,0);\n"
" }")
        self.main_footer.setFrameShape(QFrame.WinPanel)
        self.main_footer.setFrameShadow(QFrame.Raised)

        self.verticalLayout.addWidget(self.main_footer)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.minimise_button.setText("")
        self.restore_button.setText("")
        self.close_button.setText("")
        self.pushButton_7.setText(QCoreApplication.translate("MainWindow", u"Accueil", None))
        self.pushButton.setText(QCoreApplication.translate("MainWindow", u"Compte", None))
        self.pushButton_2.setText(QCoreApplication.translate("MainWindow", u" Capteur1", None))
        self.pushButton_3.setText(QCoreApplication.translate("MainWindow", u"Capteur2", None))
        self.pushButton_4.setText(QCoreApplication.translate("MainWindow", u"Capteur3", None))
        self.pushButton_5.setText(QCoreApplication.translate("MainWindow", u"Capteur4", None))
        self.pushButton_6.setText(QCoreApplication.translate("MainWindow", u"Imprimer", None))
    # retranslateUi

在主代码中,我尝试添加一些功能,例如缩小或放大窗口。我也在尝试关闭窗口,并用光标移动窗口,所以在我的主函数中,我想添加按钮的事件,尤其是“Capteur”(意思是传感器),然后按下我想要的按钮显示一个图表,显示来自气压传感器的数据。

主要代码:

import sys
import platform
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCore import (QCoreApplication, QPropertyAnimation, QDate, QDateTime, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt, QEvent)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont, QFontDatabase, QIcon, QKeySequence, QLinearGradient, QPalette, QPainter, QPixmap, QRadialGradient)
from PySide2.QtWidgets import *
from pyqtgraph import PlotWidget, plot
import pyqtgraph as pg
import os
from random import randint
import matplotlib


from ui_ihm import Ui_MainWindow


############################################ global variable################################
Window_Size=0;


class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        

        ## UI ==> INTERFACE CODES
        #####################################################################################

        ## REMOVE TITLE BAR
        self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)


        ## DROP SHADOW EFFECT
        self.shadow = QGraphicsDropShadowEffect(self)
        self.shadow.setBlurRadius(20)
        self.shadow.setXOffset(0)
        self.shadow.setYOffset(0)
        self.shadow.setColor(QColor(0, 0, 0, 60))
        self.ui.centralwidget.setGraphicsEffect(self.shadow) 

       


        ######################### les evenements des boutton restore, reduir, fermer############

        self.ui.minimise_button.clicked.connect(lambda: self.showMinimized())
        self.ui.close_button.clicked.connect(lambda: self.close())
        self.ui.restore_button.clicked.connect( lambda:  self.restore_or_maximize())
        #self.ui.bouton_cap1.clicked.connect(lambda: self.graph_cap)


        ##self.ui.dropShadowFrame.setGraphicsEffect(self.shadow)
        ##self.ui.dropShadowFrame.setGraphicsEffect(self.shadow)

        #######################################################################
        # move window avec la souris 
        def moveWindow(e):
            #detect if the wondow is normal size
            if self.isMaximized()==False:
            # move window only if the window is minimized
                # if the left button mouse is clicked
                if e.buttons() == Qt.LeftButton:
                    # move window
                    self.move(self.pos() + e.globalPos() - self.clickPosition)
                    self.clickPosition=e.globalPos()
                    e.accept()





        ########################################################################
        # evenement de clique sur la souris pour faire bouger la fenetre
        self.ui.main_header.mouseMoveEvent=moveWindow

        


        # show window gui ############################################################
        self.show()
    

    # fonction pour  reduir ou a agrandir la fenetre 
    def restore_or_maximize(self):
        global Window_Size
        win_status = Window_Size
        if win_status==0:
                Window_Size=1
                self.showMaximized()
        else:

                Window_Size=0
                self.showNormal()


    ##### add mouse event to the window #################################################
    def mousePressEvent(self,event):
        ## get the currut  position  of the mouse
        self.clickPosition=event.globalPos()
    
    #def graph_cap(self):

    

    

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    #window.show()
    sys.exit(app.exec_())

0 个答案:

没有答案
相关问题