我正在尝试使用 pyqt5 创建图形界面,当我按下按钮“capteur1”时,我想使用 PyqtGraph 或 matplotlib 以如下图所示的图形显示数据。
我使用 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_())