转载 selenium_对浏览器操作、鼠标操作等总结
阅读原文时间:2023年07月13日阅读:1

https://www.jianshu.com/p/7a4414082ce2

https://wikidocs.net/21937

https://www.cnblogs.com/linyfeng/p/11392221.html

https://blog.csdn.net/jia666666/category_9278208.html

生成EXE文件

pyinstaller -w -F qtextbrowser_advanced.py

set CONDA_FORCE_32BIT=1 //切换到32位
set CONDA_FORCE_32BIT= // 切换到64位
conda create -n py32-37 python=3.7 //创建python3.7 环境

activate py27 //激活环境
deactivate py27 //退出环境

查看环境

conda info --env

激活环境
conda activate machine

路径改成
H:
cd H:\python

启动jupyter notebook
jupyter notebook

pip install pyqt5

pip install pyqt5-tools

pip install opencv-python

pip install  Ta-Lib

conda install pandas

1.vs2017中 菜单栏 --> 工具 --> 外部工具 --> 添加
  标题:QtDesigner
  命令:C:\ProgramData\Anaconda3\envs\py3-32\Scripts\pyqt5designer.exe(虚拟环境目录)
  参数:$(ItemFileName)Form.ui
  初始目录:$(ItemDir)
  使用输出窗口:选择

2.再次添加
  标题:PyUIC5
  命令:C:\ProgramData\Anaconda3\envs\py3-32\Scripts\pyuic5.exe (虚拟环境目录)
  参数:$(ItemFileName).ui -o $(ItemFileName).py
  初始目录:$(ItemDir)
  使用输出窗口:选择
  提示输入参数:选择

3.再次添加
  标题:PyRCC5 (设计有资源文件时转xxx.py文件)
  命令:C:\ProgramData\Anaconda3\envs\py3-32\Scripts\pyrcc5.exe (虚拟环境目录)
  参数:$(ItemFileName).ui -o $(ItemFileName).py
  初始目录:$(ItemDir)
  使用输出窗口:选择
  提示输入参数:选择

https://blog.csdn.net/weixin_41145119/article/details/88889509

先用 QtDesigner 设计并保存为UI

再用PyUIC5 吧.ui文件变成.py 文件

1 # -*- coding: utf-8 -*-
2
3 # Form implementation generated from reading ui file 'untitled.ui'
4 #
5 # Created by: PyQt5 UI code generator 5.13.0
6 #
7 # WARNING! All changes made in this file will be lost!
8
9
10 from PyQt5 import QtCore, QtGui, QtWidgets
11
12
13 class Ui_MainWindow(object):
14 def setupUi(self, MainWindow):
15 MainWindow.setObjectName("MainWindow")
16 MainWindow.resize(800, 600)
17 self.centralwidget = QtWidgets.QWidget(MainWindow)
18 self.centralwidget.setObjectName("centralwidget")
19 self.pushButton = QtWidgets.QPushButton(self.centralwidget)
20 self.pushButton.setGeometry(QtCore.QRect(180, 330, 75, 23))
21 self.pushButton.setObjectName("pushButton")
22 self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
23 self.textEdit.setGeometry(QtCore.QRect(160, 130, 104, 71))
24 self.textEdit.setObjectName("textEdit")
25 MainWindow.setCentralWidget(self.centralwidget)
26 self.menubar = QtWidgets.QMenuBar(MainWindow)
27 self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
28 self.menubar.setObjectName("menubar")
29 MainWindow.setMenuBar(self.menubar)
30 self.statusbar = QtWidgets.QStatusBar(MainWindow)
31 self.statusbar.setObjectName("statusbar")
32 MainWindow.setStatusBar(self.statusbar)
33
34 self.retranslateUi(MainWindow)
35 QtCore.QMetaObject.connectSlotsByName(MainWindow)
36
37 def retranslateUi(self, MainWindow):
38 _translate = QtCore.QCoreApplication.translate
39 MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
40 self.pushButton.setText(_translate("MainWindow", "PushButton"))

1 # -*- coding: utf-8 -*-
2
3 from untitled import Ui_MainWindow #根据实际生成的UI的类名
4 # import PyQt5
5
6 import sys
7 import cv2
8 from PyQt5.QtWidgets import QApplication, QMainWindow
9 from PyQt5.QtGui import QImage, QPixmap
10
11 class MyWindow(QMainWindow, Ui_MainWindow): #生成UI的类
12 def __init__(self, *args, **kwargs):
13 super().__init__(*args, **kwargs)
14 self.setupUi(self)
15 self.pushButton.clicked.connect(self.OnPushButton1)
16
17 num = 0
18
19 def OnPushButton1(self):
20 self.textEdit.append("HellowPyQt5")
21 self.num += 1
22 self.setWindowTitle("pushbutton has been clicked {0} times".format(self.num))
23 return None
24
25 if __name__ == "__main__":
26 app = QApplication(sys.argv)
27 mainWindow = MyWindow()
28 mainWindow.show()
29 sys.exit(app.exec_())

1.QPushButton

메서드 설명
setCheckable() True 설정 시, 누른 상태와 그렇지 않은 상태를 구분합니다.
toggle() 상태를 바꿉니다.
setIcon() 버튼의 아이콘을 설정합니다.
setEnabled() False 설정 시, 버튼을 사용할 수 없습니다.
isChecked() 버튼의 선택 여부를 반환합니다.
setText() 버튼에 표시될 텍스트를 설정합니다.
text() 버튼에 표시된 텍스트를 반환합니다.

시그널 설명
clicked() 버튼을 클릭할 때 발생합니다.
pressed() 버튼이 눌렸을 때 발생합니다.
released() 버튼을 눌렀다 뗄 때 발생합니다.
toggled() 버튼의 상태가 바뀔 때 발생합니다.

QCheckBox

可用Group Box 
메서드 설명
text() 체크 박스의 라벨 텍스트를 반환합니다.
setText() 체크 박스의 라벨 텍스트를 설정합니다.
isChecked() 체크 박스의 상태를 반환합니다. (True/False)
checkState() 체크 박스의 상태를 반환합니다. (2/1/0)
toggle() 체크 박스의 상태를 변경합니다.

시그널 설명
pressed() 체크 박스를 누를 때 신호를 발생합니다.
released() 체크 박스에서 뗄 때 신호를 발생합니다.
clicked() 체크 박스를 클릭할 때 신호를 발생합니다.
stateChanged() 체크 박스의 상태가 바뀔 때 신호를 발생합니다.

  self.cB1.clicked.connect(self.cb1_fun)

def cb1_fun(self):

  if self.cB1.isChecked():
    self.cB2.setText("checked")
  else:
    self.cB2.setText("unchecked")

QRadioBox
메서드 설명
text() 버튼의 텍스트를 반환합니다.
setText() 라벨에 들어갈 텍스트를 설정합니다.
setChecked() 버튼의 선택 여부를 설정합니다.
isChecked() 버튼의 선택 여부를 반환합니다.
toggle() 버튼의 상태를 변경합니다.

메서드 설명
pressed() 버튼을 누를 때 신호를 발생합니다.
released() 버튼에서 뗄 때 신호를 발생합니다.
clicked() 버튼을 클릭할 때 신호를 발생합니다.
toggled() 버튼의 상태가 바뀔 때 신호를 발생합니다.

QComboBox

self.comboBox1.addItem("选项1")#添加选项1
self.comboBox1.addItem("选项2")
self.comboBox1.addItem("选项3")
self.comboBox1.activated[str].connect(self.onActivate)

def onActivate(self,text):
  self.label.setText(text)# 直接显示选中的字内容
  self.label.adjustSize()

QLineEdit

setEchoMode(0))
상수 값 설명
QLineEdit.Normal 0 입력된 문자를 표시합니다. (기본값)
QLineEdit.NoEcho 1 문자열을 표시하지 않습니다. 이 설정은 비밀번호의 글자수도 공개하지 않을 때 유용합니다.
QLineEdit.Password 2 입력된 문자 대신 비밀번호 가림용 문자를 표시합니다.
QLineEdit.PasswordEchoOnEdit 3 입력할 때만 문자를 표시하고, 수정 중에는 다른 문자를 표시합니다.

시그널 설명
cursorPositionChanged() 커서가 움직일 때 발생하는 신호를 발생합니다.
editingFinished() 편집이 끝났을 때 (Return/Enter 버튼이 눌릴 때) 신호를 발생합니다.
returnPressed() Return/Enter 버튼이 눌릴 때 신호를 발생합니다.
selectionChanged() 선택 영역이 바뀔 때 신호를 발생합니다.
textChanged() 텍스트가 변경될 때 신호를 발생합니다.
textEdited() 텍스트가 편집될 때 신호를 발생합니다.

  self.lineEdit1.setEchoMode(QLineEdit.Normal)#正常
  self.lineEdit2.setEchoMode(QLineEdit.NoEcho)#虽然输入了,显示没有输入
  self.lineEdit3.setEchoMode(QLineEdit.Password)#密码
  self.lineEdit4.setEchoMode(QLineEdit.PasswordEchoOnEdit)#输入完变成密码

  self.lineEdit2.textChanged[str].connect(self.chan_func)
def chan_func(self,text):
  self.label.setText(text)
  self.label.adjustSize()

QProgressBar
setMinimum()
setMaximum()
setRange()
setValue()
reset()

QSlider & QDial
setTickInterval() #틱간격을 조절
setTickPosition() #틱위치를 조절
상수 값 설명
QSlider.NoTicks 0 틱을 표시하지 않습니다.
QSlider.TicksAbove 1 틱을 (수평) 슬라이더 위쪽에 표시합니다.
QSlider.TicksBelow 2 틱을 (수평) 슬라이더 아래쪽에 표시합니다.
QSlider.TicksBothSides 3 틱을 (수평) 슬라이더 양쪽에 표시합니다.
QSlider.TicksLeft TicksAbove 틱을 (수직) 슬라이더 왼쪽에 표시합니다.
QSlider.TicksRight TicksBelow 틱을 (수직) 슬라이더 오른쪽에 표시합니다.

  self.progressBar.setMinimum(0)
  self.progressBar.setMaximum(100)
  self.progressBar.setValue(60)

  self.horizontalSlider.setMinimum(0)
  self.horizontalSlider.setMaximum(100)
  self.horizontalSlider.valueChanged.connect(self.slider_fun)
def slider_fun(self,val):
  self.progressBar.setValue(val)

시그널 설명
valueChanged() 슬라이더의 값이 변할 때 발생합니다.
sliderPressed() 사용자가 슬라이더를 움직이기 시작할 때 발생합니다.
sliderMoved() 사용자가 슬라이더를 움직이면 발생합니다.
sliderReleased() 사용자가 슬라이더를 놓을 때 발생합니다.

QPixmap
pixmap = QPixmap('landscape.jpg')
lbl_img = QLabel()
lbl_img.setPixmap(pixmap)

弹出单条输入对话框

def btn_fun(self):
  """
  返回值类型:因为只能输入一条
  getText()
  getMultiLineText()
  getInt()
  getDouble()
  getItem()
  """
  text,ok=QInputDialog.getText(self,'标题',"输入名字:")
  if ok:
    self.label.setText(text)

颜色对话框:

col = QColorDialog.getColor()
if col.isValid():
  self.frm.setStyleSheet('QWidget { background-color: %s }' % col.name())

字体对话框:

font, ok = QFontDialog.getFont()
if ok:
  self.lbl.setFont(font)

文件选择对话框:

def btn1_fun(self):

fname=QFileDialog.getOpenFileName(self,'标题','./')   if fname[0]:     f_hand=open(fname[0],'r')     with f_hand:       fdata=f_hand.read()       self.textEdit.setText(fdata)

消息对话框 有YES No两个按钮

def btn2_fun(self):
  my_select=QMessageBox.question(self,'标题',"准备好了吗?",QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
  if my_select == QMessageBox.Yes:
    print("选择了Yes")

  else:
    print("选择了No")

定时器

  timer = QTimer(self)
  timer.setSingleShot(true);//计时器循环此时true只循环一次,false无限循环
  timer.start(5000)//定时5秒
  timer.timeout.connect(self.timeout)
  timer.stop()//停止

def timeout(self):
  print("5秒")

事件

이벤트 핸들러 설명
keyPressEvent 키보드를 눌렀을 때 동작합니다.
keyReleaseEvent 키보드를 눌렀다가 뗄 때 동작합니다.
mouseDoubleClickEvent 마우스를 더블클릭할 때 동작합니다.
mouseMoveEvent 마우스를 움직일 때 동작합니다.
mousePressEvent 마우스를 누를 때 동작합니다.
mouseReleaseEvent 마우스를 눌렀다가 뗄 때 동작합니다.
moveEvent 위젯이 이동할 때 동작합니다.
resizeEvent 위젯의 크기를 변경할 때 동작합니다.

1 from PyQt5.QtCore import *
2
3 def keyPressEvent(self,e):
4 if e.key() == Qt.Key_Escape:
5 print("Escape")
6 elif e.key() == Qt.Key_A: #按下键盘A
7 print("A")
8 elif e.key() == Qt.Key_B: #按下键盘B
9 print("B")
10 def mouseMoveEvent(self,e): #按下并拖动
11 x=e.x()
12 y=e.y()
13 print("x={0},y={1}".format(x,y))

用户信号

1 import sys
2 from PyQt5.QtCore import *
3 from PyQt5.QtWidgets import *
4 from L705_UserSignal_ui import Ui_MainWindow
5
6 class SigClass(QObject):
7 # 定义了一个“def_sig1”信号,该信号没有参数据
8 def_sig1=pyqtSignal()
9 # 定义了一个"def_sig2"信号,该信号有两个参数
10 def_sig2=pyqtSignal(int,str)
11
12 class MainWinClass(QMainWindow,Ui_MainWindow):
13 def __init__(self):
14 super().__init__()
15 self.setupUi(self)
16
17 self.sigc=SigClass() #类
18 self.sigc.def_sig1.connect(self.sig1_fun) # 绑定信号1和槽函数1
19 self.sigc.def_sig2.connect(self.sig2_fun) # 绑定信号2和槽函数2
20
21 self.pushButton1.clicked.connect(self.btn1_fun)
22 self.pushButton2.clicked.connect(self.btn2_fun)
23 def btn1_fun(self):
24 self.sigc.def_sig1.emit();#提交
25
26 def btn2_fun(self):
27 self.sigc.def_sig2.emit(10,'boy');#提交
28
29 def sig1_fun(self):
30 print("sig1_fun")
31
32 def sig2_fun(self,age,name):
33 print("sig2_fun%d,%s",(age,name))
34
35 if __name__ == "__main__":
36 app=QApplication(sys.argv)
37 myWin=MainWinClass()
38 myWin.show()
39 sys.exit(app.exec_())
40

1 import sys
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtCore import *
4
5
6 class MySignal(QObject):
7 signal1 = pyqtSignal()
8
9 def run(self):
10 self.signal1.emit()
11
12 class MyWindow(QMainWindow):
13 def __init__(self):
14 super().__init__()
15
16 mysignal = MySignal()
17 mysignal.signal1.connect(self.signal1_emitted)
18 mysignal.run()
19
20 @pyqtSlot()
21 def signal1_emitted(self):
22 print("signal1 emitted")
23
24 app = QApplication(sys.argv)
25 window = MyWindow()
26 window.show()
27 app.exec_()

多个信号

1 import sys
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtCore import *
4
5 class MySignal(QObject):
6 signal1 = pyqtSignal()
7 signal2 = pyqtSignal(int, int)
8
9 def run(self):
10 self.signal1.emit()
11 self.signal2.emit(1, 2)
12
13 class MyWindow(QMainWindow):
14 def __init__(self):
15 super().__init__()
16
17 mysignal = MySignal()
18 mysignal.signal1.connect(self.signal1_emitted)
19 mysignal.signal2.connect(self.signal2_emitted)
20 mysignal.run()
21
22 @pyqtSlot()
23 def signal1_emitted(self):
24 print("signal1 emitted")
25
26 @pyqtSlot(int, int)
27 def signal2_emitted(self, arg1, arg2):
28 print("signal2 emitted", arg1, arg2)
29
30
31 app = QApplication(sys.argv)
32 window = MyWindow()
33 window.show()
34 app.exec_()

多线程1

1 import sys
2 from PyQt5.QtWidgets import *
3 from PyQt5.QtCore import *
4
5 class Worker(QThread):
6 def run(self):
7 while True:
8 print("hello")
9 self.sleep(1)
10
11 class MyWindow(QMainWindow):
12 def __init__(self):
13 super().__init__()
14
15 self.worker = Worker()
16 self.worker.start()
17
18 app = QApplication(sys.argv)
19 mywindow = MyWindow()
20 mywindow.show()
21 app.exec_()

传递参数

1 # -*- coding: utf-8 -*-
2
3 import sys
4 import time
5 from PyQt5.QtCore import QThread, pyqtSignal
6 from PyQt5.QtWidgets import QApplication, QMainWindow
7 from QThread_Example_UI import Ui_Form
8
9 class MyMainForm(QMainWindow, Ui_Form):
10 def __init__(self, parent=None):
11 super(MyMainForm, self).__init__(parent)
12 self.setupUi(self)
13 # 实例化线程对象
14 self.work = WorkThread()
15 self.runButton.clicked.connect(self.execute)
16
17 def execute(self):
18 # 启动线程
19 self.work.start()
20 # 线程自定义信号连接的槽函数
21 self.work.trigger.connect(self.display)
22
23 def display(self,str):
24 # 由于自定义信号时自动传递一个字符串参数,所以在这个槽函数中要接受一个参数
25 self.listWidget.addItem(str)
26
27 class WorkThread(QThread):
28 # 自定义信号对象。参数str就代表这个信号可以传一个字符串
29 trigger = pyqtSignal(str)
30
31 def __int__(self):
32 # 初始化函数
33 super(WorkThread, self).__init__()
34
35 def run(self):
36 #重写线程执行的run函数
37 #触发自定义信号
38 for i in range(20):
39 time.sleep(1)
40 # 通过自定义信号把待显示的字符串传递给槽函数
41 self.trigger.emit(str(i))
42
43 if __name__ == "__main__":
44 app = QApplication(sys.argv)
45 myWin = MyMainForm()
46 myWin.show()
47 sys.exit(app.exec_())

最基本

#导入程序运行必须模块
import sys
#PyQt5中使用的基本控件都在PyQt5.QtWidgets模块中
from PyQt5.QtWidgets import *
#导入designer工具生成的login模块
from login import Ui_Form

class MyMainForm(QMainWindow, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
#添加登录按钮信号和槽。注意display函数不加小括号()
self.login_Button.clicked.connect(self.display)
#添加退出按钮信号和槽。调用close函数
self.cancel_Button.clicked.connect(self.close)
def display(self):
#利用line Edit控件对象text()函数获取界面输入
username = self.user_lineEdit.text()
password = self.pwd_lineEdit.text()
#利用text Browser控件对象setText()函数设置界面显示
self.user_textBrowser.setText("登录成功!\n" + "用户名是: "+ username+ ",密码是: "+ password)

if __name__ == "__main__":
#固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行
app = QApplication(sys.argv)
#初始化
myWin = MyMainForm()
#将窗口控件显示在屏幕上
myWin.show()
#程序运行,sys.exit方法确保程序完整退出。
sys.exit(app.exec_())

直接读取UI并显示

1 import sys
2 from PyQt5 import QtWidgets ,uic
3
4 class Form(QtWidgets.QDialog):
5 def __init__(self):
6 super().__init__()
7 self.ui = uic.loadUi("asd.ui") #ui 파일 불러오기
8 self.ui.show()
9
10 if __name__ == '__main__':
11 app = QtWidgets.QApplication(sys.argv)
12 w = Form()
13 sys.exit(app.exec())

启动多个UI

1 import sys
2 from PyQt5.QtWidgets import *
3
4 class MyWidget(QWidget):
5 def __init__(self):
6 super().__init__()
7 btn1 = QPushButton('1')
8 btn2 = QPushButton('2')
9
10 layout = QHBoxLayout()
11 layout.addWidget(btn1)
12 layout.addWidget(btn2)
13 self.setLayout(layout)
14
15 self.setGeometry(300, 100, 350, 150) # x, y, width, height
16 self.setWindowTitle("QWidget")
17 self.show()
18
19 class MyDialog(QDialog):
20 def __init__(self):
21 super().__init__()
22 btn1 = QPushButton('1')
23 btn2 = QPushButton('2')
24
25 layout = QHBoxLayout()
26 layout.addWidget(btn1)
27 layout.addWidget(btn2)
28 self.setLayout(layout)
29
30 self.setGeometry(300, 300, 350, 150)
31 self.setWindowTitle("QDialog")
32 self.show()
33
34 class MyMainWindow(QMainWindow):
35 """
36 틀린방법…
37
38 ** QWidget, QDialog 처럼 layout 사용 못함.
39 """
40 def __init__(self):
41 super().__init__()
42 btn1 = QPushButton('1')
43 btn2 = QPushButton('2')
44
45 layout = QHBoxLayout()
46 layout.addWidget(btn1)
47 layout.addWidget(btn2)
48 self.setLayout(layout)
49
50 self.setGeometry(300, 500, 350, 150)
51 self.setWindowTitle("QMainWindow 틀린 방법")
52 self.show()
53
54
55 class MyMainWindow2(QMainWindow):
56 """
57 옳은 방법…
58
59 QWidget, QDialog 와 달리 QMainWindow 는 자체적으로 layout 가지고 있다.
60 central widget 을 반드시 필요로함.
61 """
62 def __init__(self):
63 super().__init__()
64 wg = MyWidget()
65 # wg = MyWidget2() # placeholder -- QWidget 상속하여 만든것으로 추후 교체하면 됨.
66 self.setCentralWidget(wg) # 반드시 필요함.
67
68 self.setGeometry(300, 700, 350, 150)
69 self.show()
70
71
72 if __name__ == '__main__':
73 app = QApplication(sys.argv)
74 ex = MyWidget()
75 ex2 = MyMainWindow()
76 ex3 = MyDialog()
77 ex4 = MyMainWindow2()
78 sys.exit(app.exec_())

1 import sys
2 from PyQt5.QtWidgets import *
3 from pyqtgraph import PlotWidget, plot
4 from L0001_UserDialog_ui import Ui_MainWindow
5
6 class MainWindow(QMainWindow,Ui_MainWindow):
7
8 def __init__(self):
9 super().__init__()
10 self.setupUi(self)
11 self.pushButton.clicked.connect(self.btn_func)
12 def btn_func(self):
13 self.widget.plot([1,2,3,4,5,6,7,8,9,10], [30,32,34,32,33,31,29,32,35,45])
14 self.widget.plot.xlabel("hello")
15 self.widget.plot.show()
16
17 if __name__ == '__main__':
18 app = QApplication(sys.argv)
19 main = MainWindow()
20 main.show()
21 sys.exit(app.exec_())

比较完整的历程

1 #https://www.learnpyqt.com/courses/graphics-plotting/plotting-pyqtgraph/
2 #http://www.pyqtgraph.org/documentation/
3 import sys
4 from PyQt5.QtWidgets import *
5 from pyqtgraph import PlotWidget,plot
6 import pyqtgraph as pg
7 from L0001_UserDialog_ui import Ui_MainWindow
8 import matplotlib.pyplot as plt
9
10 class MainWindow(QMainWindow,Ui_MainWindow):
11
12 def __init__(self):
13 super().__init__()
14 self.setupUi(self)
15 #self.pushButton.clicked.connect(self.btn_func)
16 self.graphWidget = pg.PlotWidget()
17 self.setCentralWidget(self.graphWidget)
18
19 hour = [1,2,3,4,5,6,7,8,9,10]
20 temperature_1 = [30,32,34,32,33,31,29,32,35,45]
21 temperature_2 = [50,35,44,22,38,32,27,38,32,44]
22
23 #Add Background colour to white
24 self.graphWidget.setBackground('w') #
25 #Add Title
26 #self.graphWidget.setTitle("Your Title Here", color='blue', size=30)
27 #Add Axis Labels
28 self.graphWidget.setLabel('left', 'Temperature (°C)', color='red', size=30)
29 self.graphWidget.setLabel('bottom', 'Hour (H)', color='red', size=30)
30 #Add legend
31 self.graphWidget.addLegend()
32 #Add grid
33 self.graphWidget.showGrid(x=True, y=True)
34 #Set Range
35 self.graphWidget.setXRange(0, 10, padding=0)
36 self.graphWidget.setYRange(20, 55, padding=0)
37
38 self.plot(hour, temperature_1, "Sensor1", 'r')
39 self.plot(hour, temperature_2, "Sensor2", 'b')
40
41 def plot(self, x, y, plotname, color):
42 pen = pg.mkPen(color=color)
43 self.graphWidget.plot(x, y, name=plotname, pen=pen, symbol='+', symbolSize=30, symbolBrush=(color))
44
45
46 if __name__ == '__main__':
47 app = QApplication(sys.argv)
48 main = MainWindow()
49 main.show()
50 sys.exit(app.exec_())

import sys
import numpy as np
from PyQt5.QtWidgets import *
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()

    self.setLayout(self.layout)  
    self.setGeometry(200, 200, 800, 600)

def initUI(self):  
    self.fig = plt.Figure()  
    self.canvas = FigureCanvas(self.fig)

    layout = QVBoxLayout()  
    layout.addWidget(self.canvas)

    cb = QComboBox()  
    cb.addItem('Graph1')  
    cb.addItem('Graph2')  
    cb.activated\[str\].connect(self.onComboBoxChanged)  
    layout.addWidget(cb)

    self.layout = layout

    self.onComboBoxChanged(cb.currentText())

def onComboBoxChanged(self, text):  
    if text == 'Graph1':  
        self.doGraph1()  
    elif text == 'Graph2':  
        self.doGraph2()

def doGraph1(self):  
    x = np.arange(0, 10, 0.5)  
    y1 = np.sin(x)  
    y2 = np.cos(x)

    self.fig.clear()

    ax = self.fig.add\_subplot(111)  
    ax.plot(x, y1, label="sin(x)")  
    ax.plot(x, y2, label="cos(x)", linestyle="--")

    ax.set\_xlabel("x")  
    ax.set\_xlabel("y")

    ax.set\_title("sin & cos")  
    ax.legend()

    self.canvas.draw()

def doGraph2(self):  
    X = np.arange(-5, 5, 0.25)  
    Y = np.arange(-5, 5, 0.25)  
    X, Y = np.meshgrid(X, Y)  
    Z = X\*\*2 + Y\*\*2

    self.fig.clear()

    ax = self.fig.gca(projection='3d')  
    ax.plot\_wireframe(X, Y, Z, color='black')

    self.canvas.draw() 

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